changeset 5370:058230cccebb

[gaim-migrate @ 5746] Adding some stuff here that is, er, a bit important. committer: Tailor Script <tailor@pidgin.im>
author Christian Hammond <chipx86@chipx86.com>
date Wed, 14 May 2003 05:53:48 +0000
parents a87818e9dc54
children daaeaf4696a1
files src/protocols/msn/.cvsignore src/protocols/msn/page.c src/protocols/msn/page.h
diffstat 3 files changed, 408 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/protocols/msn/.cvsignore	Wed May 14 05:53:05 2003 +0000
+++ b/src/protocols/msn/.cvsignore	Wed May 14 05:53:48 2003 +0000
@@ -7,3 +7,6 @@
 *.dll
 *.def
 *.lib
+.*.swp
+.*.swo
+.todo.*
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/protocols/msn/page.c	Wed May 14 05:53:48 2003 +0000
@@ -0,0 +1,237 @@
+/**
+ * @file page.c Paging functions
+ *
+ * gaim
+ *
+ * Copyright (C) 2003 Christian Hammond <chipx86@gnupdate.org>
+ * 
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+#include "msn.h"
+#include "page.h"
+
+#define GET_NEXT(tmp) \
+	while (*(tmp) && *(tmp) != ' ' && *(tmp) != '\r') \
+		(tmp)++; \
+	if (*(tmp) != '\0') *(tmp)++ = '\0'; \
+	if (*(tmp) == '\n') *(tmp)++; \
+	while (*(tmp) && *(tmp) == ' ') \
+		(tmp)++
+
+#define GET_NEXT_LINE(tmp) \
+	while (*(tmp) && *(tmp) != '\r') \
+		(tmp)++; \
+	if (*(tmp) != '\0') *(tmp)++ = '\0'; \
+	if (*(tmp) == '\n') *(tmp)++
+
+/*
+ * "<TEXT>"    ==  6
+ * "</TEXT>"   ==  7
+ *               ----
+ *                13
+ */
+#define MSN_PAGE_BASE_SIZE 13
+
+MsnPage *
+msn_page_new(void)
+{
+	MsnPage *page;
+
+	page = g_new0(MsnPage, 1);
+
+	page->size = MSN_PAGE_BASE_SIZE;
+
+	return page;
+}
+
+MsnPage *
+msn_page_new_from_str(MsnSession *session, const char *str)
+{
+	g_return_val_if_fail(str != NULL, NULL);
+
+	return NULL;
+}
+
+void
+msn_page_destroy(MsnPage *page)
+{
+	g_return_if_fail(page != NULL);
+
+	if (page->sender != NULL)
+		msn_user_unref(page->sender);
+
+	if (page->receiver != NULL)
+		msn_user_unref(page->receiver);
+
+	if (page->body != NULL)
+		g_free(page->body);
+
+	if (page->from_location != NULL)
+		g_free(page->from_location);
+
+	if (page->from_phone != NULL)
+		g_free(page->from_phone);
+
+	g_free(page);
+}
+
+char *
+msn_page_build_string(const MsnPage *page)
+{
+	char *page_start;
+	char *str;
+	char buf[MSN_BUF_LEN];
+	int len;
+
+	/*
+	 * Okay, how we do things here is just bad. I don't like writing to
+	 * a static buffer and then copying to the string. Unfortunately,
+	 * just trying to append to the string is causing issues.. Such as
+	 * the string you're appending to being erased. Ugh. So, this is
+	 * good enough for now.
+	 *
+	 *     -- ChipX86
+	 */
+	g_return_val_if_fail(page != NULL, NULL);
+
+	if (msn_page_is_incoming(page)) {
+		/* We don't know this yet :) */
+		return NULL;
+	}
+	else {
+		MsnUser *receiver = msn_page_get_receiver(page);
+
+		g_snprintf(buf, sizeof(buf), "PAG %d %s %d\r\n",
+				   msn_page_get_transaction_id(page),
+				   msn_user_get_passport(receiver),
+				   page->size);
+	}
+
+	len = strlen(buf) + page->size + 1;
+
+	str = g_new0(char, len);
+
+	g_strlcpy(str, buf, len);
+
+	page_start = str + strlen(str);
+
+	g_snprintf(buf, sizeof(buf), "<TEXT>%s</TEXT>", msn_page_get_body(page));
+
+	g_strlcat(str, buf, len);
+
+	if (page->size != strlen(page_start)) {
+		gaim_debug(GAIM_DEBUG_ERROR, "msn",
+				   "Outgoing page size (%d) and string length (%d) "
+				   "do not match!\n", page->size, strlen(page_start));
+	}
+
+	return str;
+}
+
+gboolean
+msn_page_is_outgoing(const MsnPage *page)
+{
+	g_return_val_if_fail(page != NULL, FALSE);
+
+	return !page->incoming;
+}
+
+gboolean
+msn_page_is_incoming(const MsnPage *page)
+{
+	g_return_val_if_fail(page != NULL, FALSE);
+
+	return page->incoming;
+}
+
+void
+msn_page_set_sender(MsnPage *page, MsnUser *user)
+{
+	g_return_if_fail(page != NULL);
+	g_return_if_fail(user != NULL);
+
+	page->sender = user;
+	
+	msn_user_ref(page->sender);
+}
+
+MsnUser *
+msn_page_get_sender(const MsnPage *page)
+{
+	g_return_val_if_fail(page != NULL, NULL);
+
+	return page->sender;
+}
+
+void
+msn_page_set_receiver(MsnPage *page, MsnUser *user)
+{
+	g_return_if_fail(page != NULL);
+	g_return_if_fail(user != NULL);
+
+	page->receiver = user;
+	
+	msn_user_ref(page->receiver);
+}
+
+MsnUser *
+msn_page_get_receiver(const MsnPage *page)
+{
+	g_return_val_if_fail(page != NULL, NULL);
+
+	return page->receiver;
+}
+
+void
+msn_page_set_transaction_id(MsnPage *page, unsigned int tid)
+{
+	g_return_if_fail(page != NULL);
+	g_return_if_fail(tid > 0);
+
+	page->trId = tid;
+}
+
+unsigned int
+msn_page_get_transaction_id(const MsnPage *page)
+{
+	g_return_val_if_fail(page != NULL, 0);
+
+	return page->trId;
+}
+
+void
+msn_page_set_body(MsnPage *page, const char *body)
+{
+	g_return_if_fail(page != NULL);
+	g_return_if_fail(body != NULL);
+
+	if (page->body != NULL) {
+		page->size -= strlen(page->body);
+		g_free(page->body);
+	}
+
+	page->body = g_strdup(body);
+
+	page->size += strlen(body);
+}
+
+const char *
+msn_page_get_body(const MsnPage *page)
+{
+	g_return_val_if_fail(page != NULL, NULL);
+
+	return page->body;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/protocols/msn/page.h	Wed May 14 05:53:48 2003 +0000
@@ -0,0 +1,168 @@
+/**
+ * @file page.h Paging functions
+ *
+ * gaim
+ *
+ * Copyright (C) 2003 Christian Hammond <chipx86@gnupdate.org>
+ * 
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+#ifndef _MSN_PAGE_H_
+#define _MSN_PAGE_H_
+
+typedef struct _MsnPage MsnPage;
+
+#include "session.h"
+#include "user.h"
+
+/**
+ * A page.
+ */
+struct _MsnPage
+{
+	MsnUser *sender;
+	MsnUser *receiver;
+
+	char *from_location;
+	char *from_phone;
+
+	gboolean incoming;
+
+	unsigned int trId;
+
+	size_t size;
+
+	char *body;
+};
+
+/**
+ * Creates a new, empty page.
+ *
+ * @return A new page.
+ */
+MsnPage *msn_page_new(void);
+
+/**
+ * Creates a new page based off a string.
+ *
+ * @param session The MSN session.
+ * @param str     The string.
+ *
+ * @return The new page.
+ */
+MsnPage *msn_page_new_from_str(MsnSession *session, const char *str);
+
+/**
+ * Destroys a page.
+ */
+void msn_page_destroy(MsnPage *page);
+
+/**
+ * Converts a page to a string.
+ *
+ * @param page The page.
+ *
+ * @return The string representation of a page.
+ */
+char *msn_page_build_string(const MsnPage *page);
+
+/**
+ * Returns TRUE if the page is outgoing.
+ *
+ * @param page The page.
+ *
+ * @return @c TRUE if the page is outgoing, or @c FALSE otherwise.
+ */
+gboolean msn_page_is_outgoing(const MsnPage *page);
+
+/**
+ * Returns TRUE if the page is incoming.
+ *
+ * @param page The page.
+ *
+ * @return @c TRUE if the page is incoming, or @c FALSE otherwise.
+ */
+gboolean msn_page_is_incoming(const MsnPage *page);
+
+/**
+ * Sets the page's sender.
+ *
+ * @param page  The page.
+ * @param user The sender.
+ */
+void msn_page_set_sender(MsnPage *page, MsnUser *user);
+
+/**
+ * Returns the page's sender.
+ *
+ * @param page The page.
+ *
+ * @return The sender.
+ */
+MsnUser *msn_page_get_sender(const MsnPage *page);
+
+/**
+ * Sets the page's receiver.
+ *
+ * @param page  The page.
+ * @param user The receiver.
+ */
+void msn_page_set_receiver(MsnPage *page, MsnUser *user);
+
+/**
+ * Returns the page's receiver.
+ *
+ * @param page The page.
+ *
+ * @return The receiver.
+ */
+MsnUser *msn_page_get_receiver(const MsnPage *page);
+
+/**
+ * Sets the page transaction ID.
+ *
+ * @param page The page.
+ * @param tid  The transaction ID.
+ */
+void msn_page_set_transaction_id(MsnPage *page, unsigned int tid);
+
+/**
+ * Returns the page transaction ID.
+ *
+ * @param page The page.
+ *
+ * @return The transaction ID.
+ */
+unsigned int msn_page_get_transaction_id(const MsnPage *page);
+
+
+/**
+ * Sets the body of a page.
+ *
+ * @param page  The page.
+ * @param body The body of the page.
+ */
+void msn_page_set_body(MsnPage *page, const char *body);
+
+/**
+ * Returns the body of the page.
+ *
+ * @param page The page.
+ *
+ * @return The body of the page.
+ */
+const char *msn_page_get_body(const MsnPage *page);
+
+#endif /* _MSN_PAGE_H_ */