Jabber WindowGram Client (JWGC)

Introduction Screenshots Installation Downloads
Documentation Browse Source Resources Project Site

Stable Version
-none-

Latest Version
beta5



Main Page | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals

JXMLComm.c File Reference

#include "libjwgc.h"

Go to the source code of this file.

Functions

jwgconn jwg_new ()
jwgconn jwg_server ()
void jwg_delete (jwgconn jwg)
void jwg_cleanup (jwgconn jwg)
void jwg_event_handler (jwgconn jwg, jwgconn_packet_h h)
void jwg_start (jwgconn jwg)
void jwg_servstart (jwgconn jwg)
void jwg_reset (jwgconn jwg)
void jwg_stop (jwgconn jwg)
int jwg_getfd (jwgconn jwg)
void jwg_send (jwgconn jwg, xode x)
void jwg_servsend (jwgconn jwg, xode x)
void jwg_serverror (jwgconn jwg, char *text)
void jwg_servsuccess (jwgconn jwg, char *text)
void jwg_send_raw (jwgconn jwg, const char *str)
void jwg_servsend_raw (jwgconn jwg, const char *str)
int jwg_sockselect (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout)
int jwg_sockrecv (int sockfd, char *buf, size_t maxsize)
int jwg_socksend (int sockfd, char *buf, size_t len)
void jwg_recv (jwgconn jwg)
void jwg_servrecv (jwgconn jwg)
void jwg_poll (jwgconn jwg, int timeout)
void jwg_servpoll (jwgconn jwg, int timeout)
jwgpacket jwgpacket_new (xode x)
jwgpacket jwgpacket_reset (jwgpacket p)


Function Documentation

void jwg_cleanup jwgconn  jwg  ) 
 

Definition at line 107 of file JXMLComm.c.

References jwgconn, and jwgconn_struct::sckfd.

Referenced by jwg_on_event_handler().

00108 {
00109         if (!jwg)
00110                 return;
00111         if (jwg->sckfd == -1)
00112                 return;
00113 
00114         close(jwg->sckfd);
00115         jwg->sckfd = -1;
00116 }

void jwg_delete jwgconn  jwg  ) 
 

Definition at line 97 of file JXMLComm.c.

References jwg_stop(), jwgconn, jwgconn_struct::p, and xode_pool_free().

00098 {
00099         if (!jwg)
00100                 return;
00101 
00102         jwg_stop(jwg);
00103         xode_pool_free(jwg->p);
00104 }

void jwg_event_handler jwgconn  jwg,
jwgconn_packet_h  h
 

Definition at line 126 of file JXMLComm.c.

References jwgconn, and jwgconn_struct::on_packet.

Referenced by check_live_jwgc(), jctl_do_sendrecv(), jwgc_init(), and main().

00127 {
00128         if (!jwg)
00129                 return;
00130 
00131         jwg->on_packet = h;
00132 }

int jwg_getfd jwgconn  jwg  ) 
 

Definition at line 243 of file JXMLComm.c.

References jwgconn_struct::fd, and jwgconn.

Referenced by check_live_jwgc(), jctl_do_sendrecv(), jwgc_init(), and main().

00244 {
00245         if (jwg) {
00246                 return jwg->fd;
00247         }
00248         else {
00249                 return -1;
00250         }
00251 }

jwgconn jwg_new  ) 
 

Definition at line 40 of file JXMLComm.c.

References jwgconn_struct::fd, jwgconn, jwgconn_struct::p, jwgconn_struct::sckfd, jwgconn_struct::state, xode_pool, xode_pool_mallocx(), and xode_pool_new().

Referenced by check_live_jwgc(), jctl_do_sendrecv(), and main().

00041 {
00042         xode_pool p;
00043         jwgconn jwg;
00044 
00045         p = xode_pool_new();
00046         if (!p)
00047                 return (NULL);
00048         jwg = xode_pool_mallocx(p, sizeof(jwgconn_struct), 0);
00049         if (!jwg)
00050                 return (NULL);
00051         jwg->p = p;
00052 
00053         jwg->state = JWGCONN_STATE_OFF;
00054         jwg->fd = -1;
00055         jwg->sckfd = -1;
00056 
00057         return jwg;
00058 }

void jwg_poll jwgconn  jwg,
int  timeout
 

Definition at line 674 of file JXMLComm.c.

References jwgconn_struct::fd, jwg_recv(), jwg_sockselect(), jwgconn, NULL, and jwgconn_struct::state.

Referenced by check_live_jwgc(), jctl_do_sendrecv(), and main().

00675 {
00676         fd_set fds;
00677         FILE *selfd;
00678         struct timeval tv;
00679 
00680         if (!jwg || jwg->state == JWGCONN_STATE_OFF)
00681                 return;
00682 
00683         FD_ZERO(&fds);
00684         FD_SET(jwg->fd, &fds);
00685         selfd = (FILE *) jwg->fd;
00686 
00687         if (timeout < 0) {
00688                 if (jwg_sockselect((int) selfd + 1, &fds, NULL, NULL, NULL) > 0)
00689                         jwg_recv(jwg);
00690         }
00691         else {
00692                 tv.tv_sec = 0;
00693                 tv.tv_usec = timeout;
00694 
00695                 if (jwg_sockselect((int) selfd + 1, &fds, NULL, NULL, &tv) > 0)
00696                         jwg_recv(jwg);
00697         }
00698 }

void jwg_recv jwgconn  jwg  ) 
 

Definition at line 529 of file JXMLComm.c.

References dJWG, dParser, dprintf(), errno, jwgconn_struct::fd, jwg_sockrecv(), jwg_sockselect(), jwgconn, NULL, jwgconn_struct::parser, jwgconn_struct::state, XML_ErrorString(), XML_GetCurrentByteIndex(), XML_GetCurrentColumnNumber(), XML_GetCurrentLineNumber(), XML_GetErrorCode(), and XML_Parse().

Referenced by jwg_poll().

00530 {
00531         char *fullbuf;
00532         static char buf[4096];
00533         int len, totallen, fromlen, errcode;
00534         struct sockaddr_in from;
00535         fd_set fds;
00536         FILE *selfd;
00537         struct timeval tv;
00538 
00539         if (!jwg || jwg->state == JWGCONN_STATE_OFF)
00540                 return;
00541 
00542         fullbuf = (char *) malloc(sizeof(char));
00543         fullbuf[0] = '\0';
00544         totallen = 0;
00545 
00546         FD_ZERO(&fds);
00547         FD_SET(jwg->fd, &fds);
00548         selfd = (FILE *) jwg->fd;
00549         tv.tv_sec = 0;
00550         tv.tv_usec = 100000;
00551 
00552         while (jwg_sockselect((int) selfd + 1, &fds, NULL, NULL, &tv) > 0) {
00553                 len = jwg_sockrecv(jwg->fd, buf, sizeof(buf) - 1);
00554                 if (len <= 0) {
00555                         break;
00556                 }
00557                 dprintf(dJWG, " in piece[%d]: %s\n", len, buf);
00558                 fullbuf = (char *) realloc(fullbuf, strlen(fullbuf) + strlen(buf) + 1);
00559                 strcat(fullbuf, buf);
00560                 totallen += len;
00561         }
00562 /*
00563         while ((len = jwg_sockrecv(jwg->fd, buf, sizeof(buf) - 1)) > 0) {
00564                 dprintf(dJWG, " in piece[%d]: %s\n", len, buf);
00565                 fullbuf = (char *) realloc(fullbuf, strlen(fullbuf) + strlen(buf) + 1);
00566                 strcat(fullbuf, buf);
00567                 totallen += len;
00568         }
00569 */
00570 
00571         if (totallen > 0) {
00572                 dprintf(dJWG, " in[%d]: %s\n", totallen, fullbuf);
00573                 errcode = XML_Parse(jwg->parser, fullbuf, totallen - 1, 0);
00574                 dprintf(dParser, "parser index %d, line %d, col %d\n", XML_GetCurrentByteIndex(jwg->parser), XML_GetCurrentLineNumber(jwg->parser), XML_GetCurrentColumnNumber(jwg->parser));
00575                 if (errcode == 0) {
00576                         dprintf(dParser, "parser error %d at byte %d: %s\n", XML_GetErrorCode(jwg->parser), XML_GetCurrentByteIndex(jwg->parser), XML_ErrorString(XML_GetErrorCode(jwg->parser)));
00577                 }
00578                 else {
00579                         dprintf(dParser, "parser complete\n");
00580                 }
00581         }
00582         else {
00583                 dprintf(dJWG, "jwg_recv: read failed, %d:%d:%s\n", totallen, errno, strerror(errno));
00584         }
00585 
00586         free(fullbuf);
00587 }

void jwg_reset jwgconn  jwg  ) 
 

Definition at line 205 of file JXMLComm.c.

References jwgconn, NULL, jwgconn_struct::parser, XML_ParserCreate(), XML_ParserFree(), XML_SetCharacterDataHandler(), XML_SetElementHandler(), and XML_SetUserData().

Referenced by jwg_servrecv().

00206 {
00207         XML_ParserFree(jwg->parser);
00208         jwg->parser = XML_ParserCreate(NULL);
00209         XML_SetUserData(jwg->parser, (void *) jwg);
00210         XML_SetElementHandler(jwg->parser, jwg_startElement, jwg_endElement);
00211         XML_SetCharacterDataHandler(jwg->parser, jwg_charData);
00212 }

void jwg_send jwgconn  jwg,
xode  x
 

Definition at line 261 of file JXMLComm.c.

References dJWG, dprintf(), errno, jwgconn_struct::fd, jwg_sockselect(), jwg_socksend(), jwgconn, NULL, jwgconn_struct::state, xode, and xode_to_str().

Referenced by check_live_jwgc(), jctl_do_sendrecv(), and main().

00262 {
00263         char *buf = xode_to_str(x);
00264         fd_set fds;
00265         FILE *selfd;
00266         struct timeval tv;
00267         int numwrote, totalsize, len, ret;
00268 
00269         if (!jwg || jwg->state == JWGCONN_STATE_OFF)
00270                 return;
00271 
00272         if (!buf)
00273                 return;
00274 
00275         FD_ZERO(&fds);
00276         FD_SET(jwg->fd, &fds);
00277         selfd = (FILE *) jwg->fd;
00278         tv.tv_sec = 0;
00279         tv.tv_usec = 100000;
00280 
00281         ret = jwg_sockselect((int) selfd + 1, NULL, &fds, NULL, &tv);
00282         if (ret < 0) {
00283                 dprintf(dJWG, "Error on select: %s\n", strerror(errno));
00284                 return;
00285         }
00286         else if (ret == 0) {
00287                 dprintf(dJWG, "Time expired while waiting to write.\n");
00288                 return;
00289         }
00290 
00291         totalsize = strlen(buf) + 1;
00292         numwrote = 0;
00293         while (numwrote < totalsize) {
00294 /*
00295                 len = send(jwg->fd, buf, totalsize - numwrote, 0);
00296 */
00297                 len = jwg_socksend(jwg->fd, buf, totalsize - numwrote);
00298                 if (len < 0) {
00299                         dprintf(dJWG, "Error writing to socket: %s\n", strerror(errno));
00300                         break;
00301                 }
00302                 numwrote += len;
00303                 dprintf(dJWG, "sent %d bytes, %d wrote out of %d\n", len, numwrote, totalsize);
00304                 buf += len;
00305         }
00306         dprintf(dJWG, "out[%d]: %s\n", totalsize, buf);
00307 }

void jwg_send_raw jwgconn  jwg,
const char *  str
 

Definition at line 409 of file JXMLComm.c.

References dJWG, dprintf(), jwgconn_struct::fd, jwgconn, and jwgconn_struct::state.

00410 {
00411         if (jwg && jwg->state != JWGCONN_STATE_OFF)
00412                 write(jwg->fd, str, strlen(str));
00413         dprintf(dJWG, "out: %s\n", str);
00414 }

jwgconn jwg_server  ) 
 

Definition at line 69 of file JXMLComm.c.

References jwgconn_struct::fd, jwgconn, jwgconn_struct::p, jwgconn_struct::sckfd, jwgconn_struct::state, xode_pool, xode_pool_mallocx(), and xode_pool_new().

Referenced by jwgc_init().

00070 {
00071         xode_pool p;
00072         jwgconn jwg;
00073 
00074         p = xode_pool_new();
00075         if (!p)
00076                 return (NULL);
00077         jwg = xode_pool_mallocx(p, sizeof(jwgconn_struct), 0);
00078         if (!jwg)
00079                 return (NULL);
00080         jwg->p = p;
00081 
00082         jwg->state = JWGCONN_STATE_OFF;
00083         jwg->fd = -1;
00084         jwg->sckfd = -1;
00085 
00086         return jwg;
00087 }

void jwg_serverror jwgconn  jwg,
char *  text
 

Definition at line 373 of file JXMLComm.c.

References jwg_servsend(), jwgconn, xode, xode_free(), xode_insert_cdata(), and xode_new().

Referenced by jwg_on_event_handler().

00374 {
00375         xode out;
00376 
00377         out = xode_new("error");
00378         xode_insert_cdata(out, text, strlen(text));
00379         jwg_servsend(jwg, out);
00380         xode_free(out);
00381 }

void jwg_servpoll jwgconn  jwg,
int  timeout
 

Definition at line 708 of file JXMLComm.c.

References jwgconn_struct::fd, jwg_servrecv(), jwg_sockselect(), jwgconn, NULL, and jwgconn_struct::state.

00709 {
00710         fd_set fds;
00711         FILE *selfd;
00712         struct timeval tv;
00713 
00714         if (!jwg || jwg->state == JWGCONN_STATE_OFF)
00715                 return;
00716 
00717         FD_ZERO(&fds);
00718         FD_SET(jwg->fd, &fds);
00719         selfd = (FILE *) jwg->fd;
00720 
00721 
00722         if (timeout < 0) {
00723                 if (select((int) selfd + 1, &fds, NULL, NULL, NULL) > 0)
00724                         jwg_servrecv(jwg);
00725         }
00726         else {
00727                 tv.tv_sec = 0;
00728                 tv.tv_usec = timeout;
00729 
00730                 if (jwg_sockselect((int) selfd + 1, &fds, NULL, NULL, &tv) > 0)
00731                         jwg_servrecv(jwg);
00732         }
00733 }

void jwg_servrecv jwgconn  jwg  ) 
 

Definition at line 596 of file JXMLComm.c.

References dJWG, dParser, dprintf(), errno, jwgconn_struct::fd, jwg_reset(), jwg_sockrecv(), jwg_sockselect(), jwgconn, NULL, jwgconn_struct::parser, jwgconn_struct::sckfd, jwgconn_struct::state, XML_ErrorString(), XML_GetCurrentByteIndex(), XML_GetCurrentColumnNumber(), XML_GetCurrentLineNumber(), XML_GetErrorCode(), and XML_Parse().

Referenced by jwg_servpoll(), and jwgc_init().

00597 {
00598         char *fullbuf;
00599         static char buf[4096];
00600         int len, totallen, fromlen, errcode;
00601         struct sockaddr_in from;
00602         fd_set fds;
00603         FILE *selfd;
00604         struct timeval tv;
00605         struct linger li;
00606 
00607         li.l_onoff = 1;
00608         li.l_linger = 900;
00609 
00610         if (!jwg || jwg->state == JWGCONN_STATE_OFF)
00611                 return;
00612 
00613         fullbuf = (char *) malloc(sizeof(char));
00614         fullbuf[0] = '\0';
00615         totallen = 0;
00616 
00617         fromlen = sizeof(from);
00618         jwg->sckfd = accept(jwg->fd, (struct sockaddr *) & from, &fromlen);
00619         if (jwg->sckfd < 0) {
00620                 dprintf(dJWG, "jwg_recv: accept failed, %d:%s\n", errno, strerror(errno));
00621                 return;
00622         }
00623 
00624         if (setsockopt(jwg->sckfd, SOL_SOCKET, SO_LINGER, (char *)&li,
00625                         sizeof(li)) == -1) {
00626                 dprintf(dJWG, "jwg_recv: set linger failed, %d:%s\n", errno, strerror(errno));
00627                 return;
00628         }
00629 
00630         FD_ZERO(&fds);
00631         FD_SET(jwg->sckfd, &fds);
00632         selfd = (FILE *) jwg->sckfd;
00633         tv.tv_sec = 0;
00634         tv.tv_usec = 100000;
00635 
00636         while (jwg_sockselect((int) selfd + 1, &fds, NULL, NULL, &tv) > 0) {
00637                 len = jwg_sockrecv(jwg->sckfd, buf, sizeof(buf) - 1);
00638                 if (len <= 0) {
00639                         break;
00640                 }
00641                 dprintf(dJWG, " in piece[%d]: %s\n", len, buf);
00642                 fullbuf = (char *) realloc(fullbuf, strlen(fullbuf) + strlen(buf) + 1);
00643                 strcat(fullbuf, buf);
00644                 totallen += len;
00645         }
00646 
00647         if (totallen > 0) {
00648                 dprintf(dJWG, " in[%d]: %s\n", totallen, fullbuf);
00649                 errcode = XML_Parse(jwg->parser, fullbuf, totallen - 1, 0);
00650                 dprintf(dParser, "parser index %d, line %d, col %d\n", XML_GetCurrentByteIndex(jwg->parser), XML_GetCurrentLineNumber(jwg->parser), XML_GetCurrentColumnNumber(jwg->parser));
00651                 if (errcode == 0) {
00652                         dprintf(dParser, "parser error %d at byte %d: %s\n", XML_GetErrorCode(jwg->parser), XML_GetCurrentByteIndex(jwg->parser), XML_ErrorString(XML_GetErrorCode(jwg->parser)));
00653                 }
00654                 else {
00655                         dprintf(dParser, "parser complete\n");
00656                 }
00657                 jwg_reset(jwg);
00658         }
00659         else {
00660                 dprintf(dJWG, "jwg_servrecv: read failed, %d:%d:%s\n", totallen, errno, strerror(errno));
00661         }
00662 
00663         free(fullbuf);
00664 }

void jwg_servsend jwgconn  jwg,
xode  x
 

Definition at line 317 of file JXMLComm.c.

References dJWG, dprintf(), errno, jwg_sockselect(), jwg_socksend(), jwgconn, NULL, jwgconn_struct::sckfd, jwgconn_struct::state, xode, and xode_to_str().

Referenced by jwg_on_event_handler(), jwg_serverror(), jwg_servsuccess(), list_contacts(), list_contacts_bygroup(), and show_status().

00318 {
00319         char *buf = xode_to_str(x);
00320         int numwrote, totalsize, len, ret;
00321         FILE *selfd;
00322         struct timeval tv;
00323         fd_set fds;
00324 
00325         if (!jwg || jwg->state == JWGCONN_STATE_OFF)
00326                 return;
00327 
00328         if (!buf)
00329                 return;
00330 
00331         FD_ZERO(&fds);
00332         FD_SET(jwg->sckfd, &fds);
00333         selfd = (FILE *) jwg->sckfd;
00334         tv.tv_sec = 0;
00335         tv.tv_usec = 100000;
00336 
00337         ret = jwg_sockselect((int) selfd + 1, NULL, &fds, NULL, &tv);
00338         if (ret < 0) {
00339                 dprintf(dJWG, "Error on select: %s\n", strerror(errno));
00340                 return;
00341         }
00342         else if (ret == 0) {
00343                 dprintf(dJWG, "Time expired while waiting to write.\n");
00344                 return;
00345         }
00346 
00347         totalsize = strlen(buf) + 1;
00348         numwrote = 0;
00349         dprintf(dJWG, "out[%d]: %s\n", totalsize, buf);
00350         while (numwrote < totalsize) {
00351 /*
00352                 len = send(jwg->sckfd, buf, totalsize - numwrote, 0);
00353 */
00354                 len = jwg_socksend(jwg->sckfd, buf, totalsize - numwrote);
00355                 if (len < 0) {
00356                         dprintf(dJWG, "Error writing to socket: %s\n", strerror(errno));
00357                         break;
00358                 }
00359                 numwrote += len;
00360                 dprintf(dJWG, "sent %d bytes, %d wrote out of %d\n", len, numwrote, totalsize);
00361                 buf += len;
00362         }
00363 }

void jwg_servsend_raw jwgconn  jwg,
const char *  str
 

Definition at line 424 of file JXMLComm.c.

References dJWG, dprintf(), jwgconn, jwgconn_struct::sckfd, and jwgconn_struct::state.

00425 {
00426         if (jwg && jwg->state != JWGCONN_STATE_OFF)
00427                 write(jwg->sckfd, str, strlen(str));
00428         dprintf(dJWG, "out: %s\n", str);
00429 }

void jwg_servstart jwgconn  jwg  ) 
 

Definition at line 174 of file JXMLComm.c.

References jwgconn_struct::fd, JSetupComm(), jwgconn, NULL, jwgconn_struct::parser, jwgconn_struct::state, XML_ParserCreate(), XML_SetCharacterDataHandler(), XML_SetElementHandler(), and XML_SetUserData().

Referenced by jwgc_init().

00175 {
00176         int flags = 0;
00177 
00178         if (!jwg || jwg->state != JWGCONN_STATE_OFF)
00179                 return;
00180 
00181         jwg->parser = XML_ParserCreate(NULL);
00182         XML_SetUserData(jwg->parser, (void *) jwg);
00183         XML_SetElementHandler(jwg->parser, jwg_startElement, jwg_endElement);
00184         XML_SetCharacterDataHandler(jwg->parser, jwg_charData);
00185 
00186         jwg->fd = JSetupComm();
00187         if (jwg->fd < 0) {
00188                 return;
00189         }
00190 /*
00191         jwg->port = get_netport();
00192 */
00193 
00194         jwg->state = JWGCONN_STATE_CONNECTED;
00195 }

void jwg_servsuccess jwgconn  jwg,
char *  text
 

Definition at line 391 of file JXMLComm.c.

References jwg_servsend(), jwgconn, xode, xode_free(), xode_insert_cdata(), and xode_new().

Referenced by jwg_on_event_handler().

00392 {
00393         xode out;
00394 
00395         out = xode_new("success");
00396         xode_insert_cdata(out, text, strlen(text));
00397         jwg_servsend(jwg, out);
00398         xode_free(out);
00399 }

int jwg_sockrecv int  sockfd,
char *  buf,
size_t  maxsize
 

Definition at line 471 of file JXMLComm.c.

References errno.

Referenced by jwg_recv(), and jwg_servrecv().

00472 {
00473         size_t totalread = 0;
00474         int ret;
00475 
00476         do {
00477                 ret = recv(sockfd, buf, maxsize - totalread, 0);
00478                 if (ret < 0 && errno != EINTR) {
00479                         return ret;
00480                 }
00481                 else if (ret == 0) {
00482                         return totalread;
00483                 }
00484                 else if (ret > 0) {
00485                         totalread += ret;
00486                         return totalread;
00487                 }
00488                 else if (ret == -1 && errno == EINTR) {
00489                         if (recv(sockfd, buf, maxsize - totalread, MSG_PEEK)
00490                                         <= 0) {
00491                                 return totalread;
00492                         }
00493                 }
00494         } while (totalread < maxsize);
00495 
00496         return totalread;
00497 }

int jwg_sockselect int  nfds,
fd_set *  readfds,
fd_set *  writefds,
fd_set *  exceptfds,
struct timeval *  timeout
 

Definition at line 432 of file JXMLComm.c.

References errno, and NULL.

Referenced by jwg_poll(), jwg_recv(), jwg_send(), jwg_servpoll(), jwg_servrecv(), and jwg_servsend().

00434 { 
00435         int ret; 
00436         struct timeval currenttv, parttv;
00437 
00438         if (!timeout) {
00439                 while (1) {
00440                         ret = select(nfds, readfds, writefds, exceptfds, NULL);
00441                         if (ret < 0 && errno != EINTR) {
00442                                 return ret;
00443                         }
00444                         else if (ret >= 0) {
00445                                 return ret;
00446                         }
00447                 }
00448         }
00449 
00450         currenttv.tv_sec = 0;
00451         currenttv.tv_usec = timeout->tv_usec;
00452 
00453         while (currenttv.tv_usec > 0) {
00454                 parttv.tv_sec = 0;
00455                 parttv.tv_usec = 1;
00456                 ret = select(nfds, readfds, writefds, exceptfds, &parttv);
00457                 if (ret < 0 && errno != EINTR) {
00458                         return ret;
00459                 }
00460                 else if (ret >= 0) {
00461                         return ret;
00462                 }
00463                 currenttv.tv_sec = 0;
00464                 currenttv.tv_usec -= 1;
00465         }
00466 
00467         return 0;
00468 } 

int jwg_socksend int  sockfd,
char *  buf,
size_t  len
 

Definition at line 500 of file JXMLComm.c.

References errno.

Referenced by jwg_send(), and jwg_servsend().

00501 {
00502         size_t totalsent = 0;
00503         int ret;
00504 
00505         do {
00506                 ret = send(sockfd, buf, len - totalsent, 0);
00507                 if (ret < 0 && errno != EINTR) {
00508                         return ret;
00509                 }
00510                 else if (ret == 0) {
00511                         return totalsent;
00512                 }
00513                 else if (ret > 0) {
00514                         totalsent += ret;
00515                         return totalsent;
00516                 }
00517         } while (totalsent < len);
00518 
00519         return totalsent;
00520 }

void jwg_start jwgconn  jwg  ) 
 

Definition at line 143 of file JXMLComm.c.

References jwgconn_struct::fd, JConnect(), jwgconn, NULL, jwgconn_struct::parser, jwgconn_struct::state, XML_ParserCreate(), XML_SetCharacterDataHandler(), XML_SetElementHandler(), XML_SetUserData(), and xode.

Referenced by check_live_jwgc(), jctl_do_sendrecv(), and main().

00144 {
00145         xode x;
00146         char *t, *t2;
00147         int len, fromlen, errcode;
00148         struct sockaddr_in from;
00149 
00150         if (!jwg || jwg->state != JWGCONN_STATE_OFF)
00151                 return;
00152 
00153         jwg->parser = XML_ParserCreate(NULL);
00154         XML_SetUserData(jwg->parser, (void *) jwg);
00155         XML_SetElementHandler(jwg->parser, jwg_startElement, jwg_endElement);
00156         XML_SetCharacterDataHandler(jwg->parser, jwg_charData);
00157 
00158         jwg->fd = JConnect();
00159         if (jwg->fd < 0) {
00160                 return;
00161         }
00162         jwg->state = JWGCONN_STATE_CONNECTED;
00163 }

void jwg_stop jwgconn  jwg  ) 
 

Definition at line 221 of file JXMLComm.c.

References jwgconn_struct::fd, jwgconn, jwgconn_struct::parser, jwgconn_struct::sckfd, jwgconn_struct::state, and XML_ParserFree().

Referenced by check_live_jwgc(), jabber_finalize(), jctl_do_sendrecv(), jwg_delete(), and main().

00222 {
00223         if (!jwg || jwg->state == JWGCONN_STATE_OFF)
00224                 return;
00225 
00226         jwg->state = JWGCONN_STATE_OFF;
00227         close(jwg->fd);
00228         jwg->fd = -1;
00229         jwg->sckfd = -1;
00230         XML_ParserFree(jwg->parser);
00231 }

jwgpacket jwgpacket_new xode  x  ) 
 

Definition at line 736 of file JXMLComm.c.

References _jwgpacket, jwgpacket, jwgpacket_reset(), jwgpacket_struct::x, xode, xode_get_pool(), and xode_pool_malloc().

00737 {
00738         jwgpacket p;
00739 
00740         if (x == NULL)
00741                 return NULL;
00742 
00743         p = xode_pool_malloc(xode_get_pool(x), sizeof(_jwgpacket));
00744         p->x = x;
00745 
00746         return jwgpacket_reset(p);
00747 }

jwgpacket jwgpacket_reset jwgpacket  p  ) 
 

Definition at line 750 of file JXMLComm.c.

References _jwgpacket, jwgpacket, jwgpacket_struct::p, jwgpacket_struct::type, jwgpacket_struct::x, xode, xode_get_name(), and xode_get_pool().

Referenced by jwg_on_event_handler(), and jwgpacket_new().

00751 {
00752         xode x;
00753 
00754         x = p->x;
00755         memset(p, 0, sizeof(_jwgpacket));
00756         p->x = x;
00757         p->p = xode_get_pool(x);
00758 
00759         if (strncmp(xode_get_name(x), "message", 7) == 0) {
00760                 p->type = JWGPACKET_MESSAGE;
00761         }
00762         else if (strncmp(xode_get_name(x), "locate", 6) == 0) {
00763                 p->type = JWGPACKET_LOCATE;
00764         }
00765         else if (strncmp(xode_get_name(x), "status", 6) == 0) {
00766                 p->type = JWGPACKET_STATUS;
00767         }
00768         else if (strncmp(xode_get_name(x), "shutdown", 8) == 0) {
00769                 p->type = JWGPACKET_SHUTDOWN;
00770         }
00771         else if (strncmp(xode_get_name(x), "check", 5) == 0) {
00772                 p->type = JWGPACKET_CHECK;
00773         }
00774         else if (strncmp(xode_get_name(x), "reread", 6) == 0) {
00775                 p->type = JWGPACKET_REREAD;
00776         }
00777         else if (strncmp(xode_get_name(x), "showvar", 7) == 0) {
00778                 p->type = JWGPACKET_SHOWVAR;
00779         }
00780         else if (strncmp(xode_get_name(x), "subscribe", 9) == 0) {
00781                 p->type = JWGPACKET_SUBSCRIBE;
00782         }
00783         else if (strncmp(xode_get_name(x), "unsubscribe", 11) == 0) {
00784                 p->type = JWGPACKET_UNSUBSCRIBE;
00785         }
00786         else if (strncmp(xode_get_name(x), "nickname", 8) == 0) {
00787                 p->type = JWGPACKET_NICKNAME;
00788         }
00789         else if (strncmp(xode_get_name(x), "group", 5) == 0) {
00790                 p->type = JWGPACKET_GROUP;
00791         }
00792         else if (strncmp(xode_get_name(x), "register", 8) == 0) {
00793                 p->type = JWGPACKET_REGISTER;
00794         }
00795         else if (strncmp(xode_get_name(x), "search", 6) == 0) {
00796                 p->type = JWGPACKET_SEARCH;
00797         }
00798         else if (strncmp(xode_get_name(x), "setvar", 6) == 0) {
00799                 p->type = JWGPACKET_SETVAR;
00800         }
00801         else if (strncmp(xode_get_name(x), "join", 4) == 0) {
00802                 p->type = JWGPACKET_JOIN;
00803         }
00804         else if (strncmp(xode_get_name(x), "leave", 5) == 0) {
00805                 p->type = JWGPACKET_LEAVE;
00806         }
00807         else if (strncmp(xode_get_name(x), "debug", 5) == 0) {
00808                 p->type = JWGPACKET_DEBUG;
00809         }
00810         else if (strncmp(xode_get_name(x), "ping", 4) == 0) {
00811                 p->type = JWGPACKET_PING;
00812         }
00813         else {
00814                 p->type = JWGPACKET_UNKNOWN;
00815         }
00816 
00817         return p;
00818 }



Last updated at Tue Dec 18 21:07:42 PST 2007. This site and project hosted by...SourceForge.net Logo

Source Perspective by Fisheye