Mercurial > pidgin
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_ */