Mercurial > pidgin.yaz
diff src/protocols/toc/toc.c @ 3630:9682c0e022c6
[gaim-migrate @ 3753]
Yeah this will probably break a lot of shit knowing my luck. But hey, I really don't care what people thnk.
committer: Tailor Script <tailor@pidgin.im>
author | Rob Flynn <gaim@robflynn.com> |
---|---|
date | Fri, 11 Oct 2002 03:14:01 +0000 |
parents | bdd0bebd2d04 |
children | da6e3c984985 |
line wrap: on
line diff
--- a/src/protocols/toc/toc.c Fri Oct 11 02:10:08 2002 +0000 +++ b/src/protocols/toc/toc.c Fri Oct 11 03:14:01 2002 +0000 @@ -24,17 +24,23 @@ #ifdef HAVE_CONFIG_H #include <config.h> #endif + +#ifndef _WIN32 #include <netdb.h> -#include <gtk/gtk.h> #include <unistd.h> -#include <errno.h> #include <netinet/in.h> #include <arpa/inet.h> +#include <sys/socket.h> +#else +#include <winsock.h> +#endif + +#include <gtk/gtk.h> +#include <errno.h> #include <string.h> #include <stdlib.h> #include <stdio.h> #include <time.h> -#include <sys/socket.h> #include <sys/types.h> #include <sys/stat.h> #include "prpl.h" @@ -42,6 +48,10 @@ #include "gaim.h" #include "proxy.h" +#ifdef _WIN32 +#include "win32dep.h" +#endif + #include "pixmaps/protocols/oscar/admin_icon.xpm" #include "pixmaps/protocols/oscar/aol_icon.xpm" #include "pixmaps/protocols/oscar/away_icon.xpm" @@ -49,6 +59,9 @@ #include "pixmaps/protocols/oscar/free_icon.xpm" #include "pixmaps/protocols/oscar/wireless_icon.xpm" +/* for win32 compatability */ +G_MODULE_IMPORT GSList *connections; + #define REVISION "penguin" #define TYPE_SIGNON 1 @@ -134,6 +147,36 @@ static void toc_callback(gpointer, gint, GaimInputCondition); static void accept_file_dialog(struct ft_request *); +/* The following were added for win32 port - Herman */ + +int toc_write(int fd, const void *buffer, int len) +{ +#ifndef _WIN32 + return write(fd, buffer, len); +#else + return send(fd, buffer, len, 0); +#endif +} + +int toc_read(int fd, void *buffer, int size) +{ +#ifndef _WIN32 + return read(fd, buffer, size); +#else + return recv(fd, buffer, size, 0); +#endif +} + +int toc_soc_close( int fd ) +{ +#ifndef _WIN32 + return close(fd); +#else + return closesocket(fd); +#endif +} + + /* ok. this function used to take username/password, and return 0 on success. * now, it takes username/password, and returns NULL on error or a new gaim_connection * on success. */ @@ -173,7 +216,7 @@ char buf[80]; if (!g_slist_find(connections, data)) { - close(source); + toc_soc_close(source); return; } @@ -190,7 +233,7 @@ tdt->toc_fd = source; debug_printf("* Client sends \"FLAPON\\r\\n\\r\\n\"\n"); - if (write(tdt->toc_fd, FLAPON, strlen(FLAPON)) < 0) { + if (toc_write(tdt->toc_fd, FLAPON, strlen(FLAPON)) < 0) { hide_login_progress(gc, "Disconnected."); signoff(gc); return; @@ -211,7 +254,7 @@ if (gc->inpa > 0) gaim_input_remove(gc->inpa); gc->inpa = 0; - close(((struct toc_data *)gc->proto_data)->toc_fd); + toc_soc_close(((struct toc_data *)gc->proto_data)->toc_fd); g_free(gc->proto_data); } @@ -327,7 +370,7 @@ slen += 1; } - return write(tdt->toc_fd, obuf, slen); + return toc_write(tdt->toc_fd, obuf, slen); } static int wait_reply(struct gaim_connection *gc, char *buffer, size_t buflen) @@ -336,7 +379,7 @@ struct sflap_hdr *hdr; int ret; - if (read(tdt->toc_fd, buffer, sizeof(struct sflap_hdr)) < 0) { + if (toc_read(tdt->toc_fd, buffer, sizeof(struct sflap_hdr)) < 0) { debug_printf("error, couldn't read flap header\n"); return -1; } @@ -354,7 +397,7 @@ ret = 0; do { count += ret; - ret = read(tdt->toc_fd, + ret = toc_read(tdt->toc_fd, buffer + sizeof(struct sflap_hdr) + count, ntohs(hdr->len) - count); } while (count + ret < ntohs(hdr->len) && ret > 0); buffer[sizeof(struct sflap_hdr) + count + ret] = '\0'; @@ -1356,7 +1399,7 @@ static struct prpl *my_protocol = NULL; -void toc_init(struct prpl *ret) +G_MODULE_EXPORT void toc_init(struct prpl *ret) { struct proto_user_opt *puo; ret->protocol = PROTO_TOC; @@ -1413,7 +1456,7 @@ #ifndef STATIC -void *gaim_prpl_init(struct prpl *prpl) +G_MODULE_EXPORT void gaim_prpl_init(struct prpl *prpl) { toc_init(prpl); prpl->plug->desc.api_version = PLUGIN_API_VERSION; @@ -1516,8 +1559,8 @@ char *buf; frombase64(ft->cookie, &buf, NULL); - read(source, ft, 8); - read(source, &ft->hdr.bcookie, MIN(256 - 8, ntohs(ft->hdr.hdrlen) - 8)); + toc_read(source, ft, 8); + toc_read(source, &ft->hdr.bcookie, MIN(256 - 8, ntohs(ft->hdr.hdrlen) - 8)); debug_header(ft); ft->hdr.hdrtype = 0x202; @@ -1525,7 +1568,7 @@ g_free(buf); ft->hdr.encrypt = 0; ft->hdr.compress = 0; debug_header(ft); - write(source, ft, 256); + toc_write(source, ft, 256); if (ft->files == 1) { ft->file = fopen(ft->filename, "w"); @@ -1534,7 +1577,7 @@ do_error_dialog(buf, strerror(errno), GAIM_ERROR); g_free(buf); gaim_input_remove(ft->inpa); - close(source); + toc_soc_close(source); g_free(ft->filename); g_free(ft->user); g_free(ft->ip); @@ -1551,7 +1594,7 @@ do_error_dialog(buf, strerror(errno), GAIM_ERROR); g_free(buf); gaim_input_remove(ft->inpa); - close(source); + toc_soc_close(source); g_free(ft->filename); g_free(ft->user); g_free(ft->ip); @@ -1563,11 +1606,11 @@ return; } - rt = read(source, buf, MIN(ntohl(ft->hdr.size) - ft->recvsize, 1024)); + rt = toc_read(source, buf, MIN(ntohl(ft->hdr.size) - ft->recvsize, 1024)); if (rt < 0) { do_error_dialog("File transfer failed; other side probably canceled.", NULL, GAIM_ERROR); gaim_input_remove(ft->inpa); - close(source); + toc_soc_close(source); g_free(ft->user); g_free(ft->ip); g_free(ft->cookie); @@ -1587,13 +1630,13 @@ ft->hdr.recvcsum = ft->hdr.checksum; /* uh... */ ft->hdr.nrecvd = htons(ntohs(ft->hdr.nrecvd) + 1); ft->hdr.flags = 0; - write(source, ft, 256); + toc_write(source, ft, 256); debug_header(ft); ft->recvsize = 0; fclose(ft->file); if (ft->hdr.filesleft == 0) { gaim_input_remove(ft->inpa); - close(source); + toc_soc_close(source); g_free(ft->filename); g_free(ft->user); g_free(ft->ip); @@ -1671,7 +1714,7 @@ int i; for (i = 0; i < remain; i++) fscanf(ft->file, "%c", &buf[i]); - write(source, buf, remain); + toc_write(source, buf, remain); ft->recvsize += remain; if (ft->recvsize == ntohl(ft->hdr.totsize)) { gaim_input_remove(ft->inpa); @@ -1685,8 +1728,8 @@ struct tm *fortime; struct stat st; - read(source, ft, 8); - read(source, &ft->hdr.bcookie, MIN(256 - 8, ntohs(ft->hdr.hdrlen) - 8)); + toc_read(source, ft, 8); + toc_read(source, &ft->hdr.bcookie, MIN(256 - 8, ntohs(ft->hdr.hdrlen) - 8)); debug_header(ft); stat(ft->filename, &st); @@ -1695,27 +1738,27 @@ fortime->tm_mon + 1, fortime->tm_mday, fortime->tm_year + 1900, fortime->tm_hour + 1, fortime->tm_min + 1, (long)st.st_size, g_basename(ft->filename)); - write(source, buf, ntohl(ft->hdr.size)); + toc_write(source, buf, ntohl(ft->hdr.size)); return; } if (ft->hdr.hdrtype == htons(0x1209)) { - read(source, ft, 8); - read(source, &ft->hdr.bcookie, MIN(256 - 8, ntohs(ft->hdr.hdrlen) - 8)); + toc_read(source, ft, 8); + toc_read(source, &ft->hdr.bcookie, MIN(256 - 8, ntohs(ft->hdr.hdrlen) - 8)); debug_header(ft); return; } if (ft->hdr.hdrtype == htons(0x120b)) { - read(source, ft, 8); - read(source, &ft->hdr.bcookie, MIN(256 - 8, ntohs(ft->hdr.hdrlen) - 8)); + toc_read(source, ft, 8); + toc_read(source, &ft->hdr.bcookie, MIN(256 - 8, ntohs(ft->hdr.hdrlen) - 8)); debug_header(ft); if (ft->hdr.hdrtype != htons(0x120c)) { g_snprintf(buf, sizeof(buf), "%s decided to cancel the transfer", ft->user); do_error_dialog(buf, NULL, GAIM_ERROR); gaim_input_remove(ft->inpa); - close(source); + toc_soc_close(source); g_free(ft->filename); g_free(ft->user); g_free(ft->ip); @@ -1729,13 +1772,13 @@ ft->hdr.hdrtype = 0x0101; ft->hdr.totfiles = htons(1); ft->hdr.filesleft = htons(1); ft->hdr.flags = 0x20; - write(source, ft, 256); + toc_write(source, ft, 256); return; } if (ft->hdr.hdrtype == 0x0101) { - read(source, ft, 8); - read(source, &ft->hdr.bcookie, MIN(256 - 8, ntohs(ft->hdr.hdrlen) - 8)); + toc_read(source, ft, 8); + toc_read(source, &ft->hdr.bcookie, MIN(256 - 8, ntohs(ft->hdr.hdrlen) - 8)); debug_header(ft); gaim_input_remove(ft->inpa); @@ -1745,12 +1788,12 @@ } if (ft->hdr.hdrtype == 0x0202) { - read(source, ft, 8); - read(source, &ft->hdr.bcookie, MIN(256 - 8, ntohs(ft->hdr.hdrlen) - 8)); + toc_read(source, ft, 8); + toc_read(source, &ft->hdr.bcookie, MIN(256 - 8, ntohs(ft->hdr.hdrlen) - 8)); debug_header(ft); gaim_input_remove(ft->inpa); - close(source); + toc_soc_close(source); g_free(ft->filename); g_free(ft->user); g_free(ft->ip); @@ -1798,7 +1841,7 @@ hdr->lnameoffset = 0x1A; hdr->lsizeoffset = 0x10; g_snprintf(hdr->name, 64, "listing.txt"); - if (write(src, hdr, 256) < 0) { + if (toc_write(src, hdr, 256) < 0) { do_error_dialog(_("Could not write file header. The file will not be transferred."), NULL, GAIM_ERROR); fclose(ft->file); g_free(ft->filename); @@ -1889,7 +1932,7 @@ ft->files = fr->files; ft->window = window = gtk_file_selection_new(_("Gaim - Save As...")); - g_snprintf(buf, sizeof(buf), "%s/%s", g_get_home_dir(), fr->filename ? fr->filename : ""); + g_snprintf(buf, sizeof(buf), "%s/%s", gaim_home_dir(), fr->filename ? fr->filename : ""); gtk_file_selection_set_filename(GTK_FILE_SELECTION(window), buf); gtk_signal_connect(GTK_OBJECT(window), "destroy", GTK_SIGNAL_FUNC(cancel_callback), ft);