From: Piotr S. <ps...@us...> - 2009-09-17 12:05:39
|
Update of /cvsroot/ayttm/ayttm/modules/jabber/libjabber In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv12682/modules/jabber/libjabber Modified Files: jconn.c jid.c jpacket.c jutil.c log.c pproxy.c rate.c Log Message: reformatted source code Index: jconn.c =================================================================== RCS file: /cvsroot/ayttm/ayttm/modules/jabber/libjabber/jconn.c,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- jconn.c 15 Aug 2009 19:57:27 -0000 1.14 +++ jconn.c 17 Sep 2009 12:04:59 -0000 1.15 @@ -31,10 +31,11 @@ int ext_jabber_write(jconn j, const char *buf, int len); /* prototypes of the local functions */ -static void startElement(void *userdata, const char *name, const char **attribs); +static void startElement(void *userdata, const char *name, + const char **attribs); static void endElement(void *userdata, const char *name); static void charData(void *userdata, const char *s, int slen); -void jab_continue (void *data, int error, jconn j); +void jab_continue(void *data, int error, jconn j); /* * jab_new -- initialize a new jabber connection @@ -50,24 +51,27 @@ */ jconn jab_new(char *user, char *pass, char *serv) { - pool p; - jconn j; + pool p; + jconn j; - if(!user) return(NULL); + if (!user) + return (NULL); - p = pool_new(); - if(!p) return(NULL); - j = pmalloc_x(p, sizeof(jconn_struct), 0); - if(!j) return(NULL); - j->p = p; - - j->user = jid_new(p, user); - j->pass = pstrdup(p, pass); - j->serv = pstrdup(p, serv); - - j->state = JCONN_STATE_OFF; + p = pool_new(); + if (!p) + return (NULL); + j = pmalloc_x(p, sizeof(jconn_struct), 0); + if (!j) + return (NULL); + j->p = p; + + j->user = jid_new(p, user); + j->pass = pstrdup(p, pass); + j->serv = pstrdup(p, serv); - return j; + j->state = JCONN_STATE_OFF; + + return j; } /* @@ -79,10 +83,11 @@ */ void jab_delete(jconn j) { - if(!j) return; + if (!j) + return; - jab_stop(j); - pool_free(j->p); + jab_stop(j); + pool_free(j->p); } /* @@ -94,9 +99,10 @@ */ void jab_state_handler(jconn j, jconn_state_h h) { - if(!j) return; + if (!j) + return; - j->on_state = h; + j->on_state = h; } /* @@ -108,12 +114,12 @@ */ void jab_packet_handler(jconn j, jconn_packet_h h) { - if(!j) return; + if (!j) + return; - j->on_packet = h; + j->on_packet = h; } - /* * jab_start -- start connection * @@ -123,53 +129,52 @@ */ int jab_start(jconn j) { - int tag = 0; - if(!j || j->state != JCONN_STATE_OFF) return 0; + int tag = 0; + if (!j || j->state != JCONN_STATE_OFF) + return 0; - j->parser = XML_ParserCreate(NULL); - XML_SetUserData(j->parser, (void *)j); - XML_SetElementHandler(j->parser, startElement, endElement); - XML_SetCharacterDataHandler(j->parser, charData); + j->parser = XML_ParserCreate(NULL); + XML_SetUserData(j->parser, (void *)j); + XML_SetElementHandler(j->parser, startElement, endElement); + XML_SetCharacterDataHandler(j->parser, charData); - if (!j->serv || !strlen(j->serv)) - j->serv = j->user->server; + if (!j->serv || !strlen(j->serv)) + j->serv = j->user->server; - if ((tag = ext_jabber_connect(j, jab_continue)) < 0) { - STATE_EVT(JCONN_STATE_OFF); - return 0; - } - return tag; + if ((tag = ext_jabber_connect(j, jab_continue)) < 0) { + STATE_EVT(JCONN_STATE_OFF); + return 0; + } + return tag; } - -void jab_continue (void *data, int error, jconn j) +void jab_continue(void *data, int error, jconn j) { - xmlnode x; - char *t,*t2; - + xmlnode x; + char *t, *t2; - if(error) { - ext_jabber_connect_error(data, error, j); - return; - } + if (error) { + ext_jabber_connect_error(data, error, j); + return; + } - j->state = JCONN_STATE_CONNECTED; - STATE_EVT(JCONN_STATE_CONNECTED) + j->state = JCONN_STATE_CONNECTED; + STATE_EVT(JCONN_STATE_CONNECTED) - /* start stream */ - x = jutil_header(NS_CLIENT, j->user->server); - t = xmlnode2str(x); - /* this is ugly, we can create the string here instead of jutil_header */ - /* what do you think about it? -madcat */ - t2 = strstr(t,"/>"); - *t2++ = '>'; - *t2 = '\0'; - jab_send_raw(j,"<?xml version='1.0'?>"); - jab_send_raw(j,t); - xmlnode_free(x); + /* start stream */ + x = jutil_header(NS_CLIENT, j->user->server); + t = xmlnode2str(x); + /* this is ugly, we can create the string here instead of jutil_header */ + /* what do you think about it? -madcat */ + t2 = strstr(t, "/>"); + *t2++ = '>'; + *t2 = '\0'; + jab_send_raw(j, "<?xml version='1.0'?>"); + jab_send_raw(j, t); + xmlnode_free(x); - j->state = JCONN_STATE_ON; - STATE_EVT(JCONN_STATE_ON) + j->state = JCONN_STATE_ON; + STATE_EVT(JCONN_STATE_ON) } /* @@ -180,12 +185,13 @@ */ void jab_stop(jconn j) { - if(!j || j->state == JCONN_STATE_OFF) return; + if (!j || j->state == JCONN_STATE_OFF) + return; - j->state = JCONN_STATE_OFF; - ext_jabber_disconnect(j); + j->state = JCONN_STATE_OFF; + ext_jabber_disconnect(j); - XML_ParserFree(j->parser); + XML_ParserFree(j->parser); } /* UNUSED @@ -213,10 +219,10 @@ */ jid jab_getjid(jconn j) { - if(j) - return(j->user); - else - return NULL; + if (j) + return (j->user); + else + return NULL; } /* jab_getsid -- get stream id @@ -228,10 +234,10 @@ */ char *jab_getsid(jconn j) { - if(j) - return(j->sid); - else - return NULL; + if (j) + return (j->sid); + else + return NULL; } /* @@ -244,16 +250,15 @@ void jab_send(jconn j, xmlnode x) { - if (j && j->state != JCONN_STATE_OFF) - { - char *buf = xmlnode2str(x); + if (j && j->state != JCONN_STATE_OFF) { + char *buf = xmlnode2str(x); - ext_jabber_write(j, buf, strlen(buf)); + ext_jabber_write(j, buf, strlen(buf)); #ifdef JDEBUG - fprintf(stderr, "jab<%s %s\n", j->user->user, buf); + fprintf(stderr, "jab<%s %s\n", j->user->user, buf); #endif - } + } } /* @@ -265,11 +270,11 @@ */ void jab_send_raw(jconn j, const char *str) { - if (j && j->state != JCONN_STATE_OFF) { - ext_jabber_write(j, str, strlen(str)); - } + if (j && j->state != JCONN_STATE_OFF) { + ext_jabber_write(j, str, strlen(str)); + } #ifdef JDEBUG - fprintf(stderr, "rjab<%s %s\n", j->user->user, str); + fprintf(stderr, "rjab<%s %s\n", j->user->user, str); #endif } @@ -281,35 +286,33 @@ */ int jab_recv(jconn j) { - static char buf[4096]; - int len = 0; + static char buf[4096]; + int len = 0; - if(!j || j->state == JCONN_STATE_OFF) - return -1; + if (!j || j->state == JCONN_STATE_OFF) + return -1; /* do { ret = ext_jabber_read(j, buf, sizeof(buf)-1); } while( ret > 0 && (len+=ret) ); */ - len = ext_jabber_read(j, buf, sizeof(buf) - 1 ); + len = ext_jabber_read(j, buf, sizeof(buf) - 1); - if(len>0) - { - buf[len] = '\0'; + if (len > 0) { + buf[len] = '\0'; #ifdef JDEBUG - fprintf(stderr, "jab>%s %s\n", j->user->user, buf); + fprintf(stderr, "jab>%s %s\n", j->user->user, buf); #endif - XML_Parse(j->parser, buf, len, 0); - } - else if( len<0 && errno != EAGAIN ) - { - STATE_EVT(JCONN_STATE_OFF); - jab_stop(j); - } + XML_Parse(j->parser, buf, len, 0); + } else if (len < 0 && errno != EAGAIN) { + STATE_EVT(JCONN_STATE_OFF); + jab_stop(j); + } - return len; + return len; } + //#undef JDEBUG /* * jab_poll -- check socket for incoming data @@ -320,7 +323,7 @@ */ void jab_poll(jconn j) { - jab_recv(j); + jab_recv(j); } /* @@ -331,41 +334,40 @@ */ void jab_auth(jconn j) { - xmlnode x,y,z; - char *hash, *user; + xmlnode x, y, z; + char *hash, *user; - if (!j) + if (!j) return; - x = jutil_iqnew(JPACKET__SET, NS_AUTH); - xmlnode_put_attrib(x, "id", "id_auth"); - y = xmlnode_get_tag(x,"query"); - - user = j->user->user; - - if (user) { - z = xmlnode_insert_tag(y, "username"); - xmlnode_insert_cdata(z, user, -1); - } - - z = xmlnode_insert_tag(y, "resource"); - xmlnode_insert_cdata(z, j->user->resource, -1); - - if (j->sid) { - z = xmlnode_insert_tag(y, "digest"); - hash = pmalloc(x->p, strlen(j->sid)+strlen(j->pass)+1); - strcpy(hash, j->sid); - strcat(hash, j->pass); - hash = shahash(hash); - xmlnode_insert_cdata(z, hash, 40); - } - else { + x = jutil_iqnew(JPACKET__SET, NS_AUTH); + xmlnode_put_attrib(x, "id", "id_auth"); + y = xmlnode_get_tag(x, "query"); + + user = j->user->user; + + if (user) { + z = xmlnode_insert_tag(y, "username"); + xmlnode_insert_cdata(z, user, -1); + } + + z = xmlnode_insert_tag(y, "resource"); + xmlnode_insert_cdata(z, j->user->resource, -1); + + if (j->sid) { + z = xmlnode_insert_tag(y, "digest"); + hash = pmalloc(x->p, strlen(j->sid) + strlen(j->pass) + 1); + strcpy(hash, j->sid); + strcat(hash, j->pass); + hash = shahash(hash); + xmlnode_insert_cdata(z, hash, 40); + } else { z = xmlnode_insert_tag(y, "password"); xmlnode_insert_cdata(z, j->pass, -1); - } + } - jab_send(j, x); - xmlnode_free(x); + jab_send(j, x); + xmlnode_free(x); } /* @@ -376,100 +378,95 @@ */ void jab_reg(jconn j) { - xmlnode x,y,z; - char *user; + xmlnode x, y, z; + char *user; - if (!j) + if (!j) return; - x = jutil_iqnew(JPACKET__SET, NS_REGISTER); - xmlnode_put_attrib(x, "id", "id_reg"); - y = xmlnode_get_tag(x, "query"); + x = jutil_iqnew(JPACKET__SET, NS_REGISTER); + xmlnode_put_attrib(x, "id", "id_reg"); + y = xmlnode_get_tag(x, "query"); - user = j->user->user; + user = j->user->user; - if (user){ - z = xmlnode_insert_tag(y, "username"); - xmlnode_insert_cdata(z, user, -1); - } + if (user) { + z = xmlnode_insert_tag(y, "username"); + xmlnode_insert_cdata(z, user, -1); + } - z = xmlnode_insert_tag(y, "resource"); - xmlnode_insert_cdata(z, j->user->resource, -1); + z = xmlnode_insert_tag(y, "resource"); + xmlnode_insert_cdata(z, j->user->resource, -1); - if (j->pass){ + if (j->pass) { z = xmlnode_insert_tag(y, "password"); xmlnode_insert_cdata(z, j->pass, -1); - } + } - jab_send(j, x); - xmlnode_free(x); - j->state = JCONN_STATE_ON; - STATE_EVT(JCONN_STATE_ON) + jab_send(j, x); + xmlnode_free(x); + j->state = JCONN_STATE_ON; + STATE_EVT(JCONN_STATE_ON) } - /* local functions */ static void startElement(void *userdata, const char *name, const char **attribs) { - xmlnode x; - jconn j = (jconn)userdata; + xmlnode x; + jconn j = (jconn) userdata; - if(j->current) - { - /* Append the node to the current one */ - x = xmlnode_insert_tag(j->current, name); - xmlnode_put_expat_attribs(x, attribs); - - j->current = x; - } - else - { - x = xmlnode_new_tag(name); - xmlnode_put_expat_attribs(x, attribs); - if(strcmp(name, "stream:stream") == 0) { - /* special case: name == stream:stream */ - /* id attrib of stream is stored for digest auth */ - j->sid = xmlnode_get_attrib(x, "id"); - /* STATE_EVT(JCONN_STATE_AUTH) */ - xmlnode_free(x); - } else { - j->current = x; - } - } + if (j->current) { + /* Append the node to the current one */ + x = xmlnode_insert_tag(j->current, name); + xmlnode_put_expat_attribs(x, attribs); + + j->current = x; + } else { + x = xmlnode_new_tag(name); + xmlnode_put_expat_attribs(x, attribs); + if (strcmp(name, "stream:stream") == 0) { + /* special case: name == stream:stream */ + /* id attrib of stream is stored for digest auth */ + j->sid = xmlnode_get_attrib(x, "id"); + /* STATE_EVT(JCONN_STATE_AUTH) */ + xmlnode_free(x); + } else { + j->current = x; + } + } } static void endElement(void *userdata, const char *name) { - jconn j = (jconn)userdata; - xmlnode x; - jpacket p; - - if(j->current == NULL) { - /* we got </stream:stream> */ - STATE_EVT(JCONN_STATE_OFF) - return; - } - - x = xmlnode_get_parent(j->current); - - if(x == NULL) - { - /* it is time to fire the event */ - p = jpacket_new(j->current); - - if(j->on_packet) - (j->on_packet)(j, p); - xmlnode_free(j->current); - } + jconn j = (jconn) userdata; + xmlnode x; + jpacket p; + + if (j->current == NULL) { + /* we got </stream:stream> */ + STATE_EVT(JCONN_STATE_OFF) + return; + } + + x = xmlnode_get_parent(j->current); + + if (x == NULL) { + /* it is time to fire the event */ + p = jpacket_new(j->current); + + if (j->on_packet) + (j->on_packet) (j, p); + xmlnode_free(j->current); + } - j->current = x; + j->current = x; } static void charData(void *userdata, const char *s, int slen) { - jconn j = (jconn)userdata; + jconn j = (jconn) userdata; - if (j->current) - xmlnode_insert_cdata(j->current, s, slen); + if (j->current) + xmlnode_insert_cdata(j->current, s, slen); } Index: jid.c =================================================================== RCS file: /cvsroot/ayttm/ayttm/modules/jabber/libjabber/jid.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- jid.c 3 Aug 2007 20:38:39 -0000 1.2 +++ jid.c 17 Sep 2009 12:04:59 -0000 1.3 @@ -43,279 +43,296 @@ jid jid_safe(jid id) { - unsigned char *str; + unsigned char *str; - if(strlen(id->server) == 0 || strlen(id->server) > 255) - return NULL; + if (strlen(id->server) == 0 || strlen(id->server) > 255) + return NULL; - /* lowercase the hostname, make sure it's valid characters */ - for(str = (unsigned char *)id->server; *str != '\0'; str++) - { - *str = tolower(*str); - if(!(isalnum(*str) || *str == '.' || *str == '-' || *str == '_')) return NULL; - } - - /* cut off the user */ - if(id->user != NULL && strlen(id->user) > 64) - id->user[64] = '\0'; - - /* check for low and invalid ascii characters in the username */ - if(id->user != NULL) - for(str = (unsigned char *)id->user; *str != '\0'; str++) - if(*str <= 32 || *str == ':' || *str == '@' || *str == '<' || *str == '>' || *str == '\'' || *str == '"' || *str == '&') return NULL; + /* lowercase the hostname, make sure it's valid characters */ + for (str = (unsigned char *)id->server; *str != '\0'; str++) { + *str = tolower(*str); + if (!(isalnum(*str) || *str == '.' || *str == '-' + || *str == '_')) + return NULL; + } + + /* cut off the user */ + if (id->user != NULL && strlen(id->user) > 64) + id->user[64] = '\0'; + + /* check for low and invalid ascii characters in the username */ + if (id->user != NULL) + for (str = (unsigned char *)id->user; *str != '\0'; str++) + if (*str <= 32 || *str == ':' || *str == '@' + || *str == '<' || *str == '>' || *str == '\'' + || *str == '"' || *str == '&') + return NULL; - return id; + return id; } jid jid_new(pool p, char *idstr) { - char *server, *resource, *type, *str; - jid id; + char *server, *resource, *type, *str; + jid id; - if(p == NULL || idstr == NULL || strlen(idstr) == 0) - return NULL; + if (p == NULL || idstr == NULL || strlen(idstr) == 0) + return NULL; - /* user@server/resource */ + /* user@server/resource */ - str = pstrdup(p, idstr); - - id = pmalloco(p,sizeof(struct jid_struct)); - id->p = p; - - resource = strstr(str,"/"); - if(resource != NULL) - { - *resource = '\0'; - ++resource; - if(strlen(resource) > 0) - id->resource = resource; - }else{ - resource = str + strlen(str); /* point to end */ - } - - type = strstr(str,":"); - if(type != NULL && type < resource) - { - *type = '\0'; - ++type; - str = type; /* ignore the type: prefix */ - } - - server = strstr(str,"@"); - if(server == NULL || server > resource) - { /* if there's no @, it's just the server address */ - id->server = str; - }else{ - *server = '\0'; - ++server; - id->server = server; - if(strlen(str) > 0) - id->user = str; - } + str = pstrdup(p, idstr); + + id = pmalloco(p, sizeof(struct jid_struct)); + id->p = p; + + resource = strstr(str, "/"); + if (resource != NULL) { + *resource = '\0'; + ++resource; + if (strlen(resource) > 0) + id->resource = resource; + } else { + resource = str + strlen(str); /* point to end */ + } + + type = strstr(str, ":"); + if (type != NULL && type < resource) { + *type = '\0'; + ++type; + str = type; /* ignore the type: prefix */ + } + + server = strstr(str, "@"); + if (server == NULL || server > resource) { /* if there's no @, it's just the server address */ + id->server = str; + } else { + *server = '\0'; + ++server; + id->server = server; + if (strlen(str) > 0) + id->user = str; + } - return jid_safe(id); + return jid_safe(id); } void jid_set(jid id, char *str, int item) { - char *old; + char *old; - if(id == NULL) - return; + if (id == NULL) + return; - /* invalidate the cached copy */ - id->full = NULL; + /* invalidate the cached copy */ + id->full = NULL; - switch(item) - { - case JID_RESOURCE: - if(str != NULL && strlen(str) != 0) - id->resource = pstrdup(id->p, str); - else - id->resource = NULL; - break; - case JID_USER: - old = id->user; - if(str != NULL && strlen(str) != 0) - id->user = pstrdup(id->p, str); - else - id->user = NULL; - if(jid_safe(id) == NULL) - id->user = old; /* revert if invalid */ - break; - case JID_SERVER: - old = id->server; - id->server = pstrdup(id->p, str); - if(jid_safe(id) == NULL) - id->server = old; /* revert if invalid */ - break; - } + switch (item) { + case JID_RESOURCE: + if (str != NULL && strlen(str) != 0) + id->resource = pstrdup(id->p, str); + else + id->resource = NULL; + break; + case JID_USER: + old = id->user; + if (str != NULL && strlen(str) != 0) + id->user = pstrdup(id->p, str); + else + id->user = NULL; + if (jid_safe(id) == NULL) + id->user = old; /* revert if invalid */ + break; + case JID_SERVER: + old = id->server; + id->server = pstrdup(id->p, str); + if (jid_safe(id) == NULL) + id->server = old; /* revert if invalid */ + break; + } } char *jid_full(jid id) { - spool s; + spool s; - if(id == NULL) - return NULL; + if (id == NULL) + return NULL; - /* use cached copy */ - if(id->full != NULL) - return id->full; + /* use cached copy */ + if (id->full != NULL) + return id->full; - s = spool_new(id->p); + s = spool_new(id->p); - if(id->user != NULL) - spooler(s, id->user,"@",s); + if (id->user != NULL) + spooler(s, id->user, "@", s); - spool_add(s, id->server); + spool_add(s, id->server); - if(id->resource != NULL) - spooler(s, "/",id->resource,s); + if (id->resource != NULL) + spooler(s, "/", id->resource, s); - id->full = spool_print(s); - return id->full; + id->full = spool_print(s); + return id->full; } /* parses a /resource?name=value&foo=bar into an xmlnode representing <resource name="value" foo="bar"/> */ xmlnode jid_xres(jid id) { - char *cur, *qmark, *amp, *eq; - xmlnode x; + char *cur, *qmark, *amp, *eq; + xmlnode x; - if(id == NULL || id->resource == NULL) return NULL; + if (id == NULL || id->resource == NULL) + return NULL; - cur = pstrdup(id->p, id->resource); - qmark = strstr(cur, "?"); - if(qmark == NULL) return NULL; - *qmark = '\0'; - qmark++; - - x = _xmlnode_new(id->p, cur, NTYPE_TAG); - - cur = qmark; - while(cur != '\0') - { - eq = strstr(cur, "="); - if(eq == NULL) break; - *eq = '\0'; - eq++; - - amp = strstr(eq, "&"); - if(amp != NULL) - { - *amp = '\0'; - amp++; - } - - xmlnode_put_attrib(x,cur,eq); - - if(amp != NULL) - cur = amp; - else - break; - } + cur = pstrdup(id->p, id->resource); + qmark = strstr(cur, "?"); + if (qmark == NULL) + return NULL; + *qmark = '\0'; + qmark++; + + x = _xmlnode_new(id->p, cur, NTYPE_TAG); + + cur = qmark; + while (cur != '\0') { + eq = strstr(cur, "="); + if (eq == NULL) + break; + *eq = '\0'; + eq++; + + amp = strstr(eq, "&"); + if (amp != NULL) { + *amp = '\0'; + amp++; + } + + xmlnode_put_attrib(x, cur, eq); + + if (amp != NULL) + cur = amp; + else + break; + } - return x; + return x; } /* local utils */ int _jid_nullstrcmp(char *a, char *b) { - if(a == NULL && b == NULL) return 0; - if(a == NULL || b == NULL) return -1; - return strcmp(a,b); + if (a == NULL && b == NULL) + return 0; + if (a == NULL || b == NULL) + return -1; + return strcmp(a, b); } + int _jid_nullstrcasecmp(char *a, char *b) { - if(a == NULL && b == NULL) return 0; - if(a == NULL || b == NULL) return -1; - return strcasecmp(a,b); + if (a == NULL && b == NULL) + return 0; + if (a == NULL || b == NULL) + return -1; + return strcasecmp(a, b); } int jid_cmp(jid a, jid b) { - if(a == NULL || b == NULL) - return -1; + if (a == NULL || b == NULL) + return -1; - if(_jid_nullstrcmp(a->resource, b->resource) != 0) return -1; - if(_jid_nullstrcasecmp(a->user, b->user) != 0) return -1; - if(_jid_nullstrcmp(a->server, b->server) != 0) return -1; + if (_jid_nullstrcmp(a->resource, b->resource) != 0) + return -1; + if (_jid_nullstrcasecmp(a->user, b->user) != 0) + return -1; + if (_jid_nullstrcmp(a->server, b->server) != 0) + return -1; - return 0; + return 0; } /* suggested by Anders Qvist <qu...@va...> */ int jid_cmpx(jid a, jid b, int parts) { - if(a == NULL || b == NULL) - return -1; + if (a == NULL || b == NULL) + return -1; - if(parts & JID_RESOURCE && _jid_nullstrcmp(a->resource, b->resource) != 0) return -1; - if(parts & JID_USER && _jid_nullstrcasecmp(a->user, b->user) != 0) return -1; - if(parts & JID_SERVER && _jid_nullstrcmp(a->server, b->server) != 0) return -1; + if (parts & JID_RESOURCE + && _jid_nullstrcmp(a->resource, b->resource) != 0) + return -1; + if (parts & JID_USER && _jid_nullstrcasecmp(a->user, b->user) != 0) + return -1; + if (parts & JID_SERVER && _jid_nullstrcmp(a->server, b->server) != 0) + return -1; - return 0; + return 0; } /* makes a copy of b in a's pool, requires a valid a first! */ jid jid_append(jid a, jid b) { - jid next; + jid next; - if(a == NULL) - return NULL; + if (a == NULL) + return NULL; - if(b == NULL) - return a; + if (b == NULL) + return a; - next = a; - while(next != NULL) - { - /* check for dups */ - if(jid_cmp(next,b) == 0) - break; - if(next->next == NULL) - next->next = jid_new(a->p,jid_full(b)); - next = next->next; - } - return a; + next = a; + while (next != NULL) { + /* check for dups */ + if (jid_cmp(next, b) == 0) + break; + if (next->next == NULL) + next->next = jid_new(a->p, jid_full(b)); + next = next->next; + } + return a; } xmlnode jid_nodescan(jid id, xmlnode x) { - xmlnode cur; - pool p; - jid tmp; - - if(id == NULL || xmlnode_get_firstchild(x) == NULL) return NULL; - - p = pool_new(); - for(cur = xmlnode_get_firstchild(x); cur != NULL; cur = xmlnode_get_nextsibling(cur)) - { - if(xmlnode_get_type(cur) != NTYPE_TAG) continue; - - tmp = jid_new(p,xmlnode_get_attrib(cur,"jid")); - if(tmp == NULL) continue; - - if(jid_cmp(tmp,id) == 0) break; - } - pool_free(p); + xmlnode cur; + pool p; + jid tmp; + + if (id == NULL || xmlnode_get_firstchild(x) == NULL) + return NULL; + + p = pool_new(); + for (cur = xmlnode_get_firstchild(x); cur != NULL; + cur = xmlnode_get_nextsibling(cur)) { + if (xmlnode_get_type(cur) != NTYPE_TAG) + continue; + + tmp = jid_new(p, xmlnode_get_attrib(cur, "jid")); + if (tmp == NULL) + continue; + + if (jid_cmp(tmp, id) == 0) + break; + } + pool_free(p); - return cur; + return cur; } jid jid_user(jid a) { - jid ret; + jid ret; - if(a == NULL || a->resource == NULL) return a; + if (a == NULL || a->resource == NULL) + return a; - ret = pmalloco(a->p,sizeof(struct jid_struct)); - ret->p = a->p; - ret->user = a->user; - ret->server = a->server; + ret = pmalloco(a->p, sizeof(struct jid_struct)); + ret->p = a->p; + ret->user = a->user; + ret->server = a->server; - return ret; + return ret; } Index: jpacket.c =================================================================== RCS file: /cvsroot/ayttm/ayttm/modules/jabber/libjabber/jpacket.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- jpacket.c 1 Apr 2003 07:24:34 -0000 1.1.1.1 +++ jpacket.c 17 Sep 2009 12:04:59 -0000 1.2 @@ -43,116 +43,110 @@ jpacket jpacket_new(xmlnode x) { - jpacket p; + jpacket p; - if(x == NULL) - return NULL; + if (x == NULL) + return NULL; - p = pmalloc(xmlnode_pool(x),sizeof(_jpacket)); - p->x = x; + p = pmalloc(xmlnode_pool(x), sizeof(_jpacket)); + p->x = x; - return jpacket_reset(p); + return jpacket_reset(p); } jpacket jpacket_reset(jpacket p) { - char *val; - xmlnode x; + char *val; + xmlnode x; - x = p->x; - memset(p,0,sizeof(_jpacket)); - p->x = x; - p->p = xmlnode_pool(x); - - if(strncmp(xmlnode_get_name(x),"message",7) == 0) - { - p->type = JPACKET_MESSAGE; - }else if(strncmp(xmlnode_get_name(x),"presence",8) == 0) - { - p->type = JPACKET_PRESENCE; - val = xmlnode_get_attrib(x, "type"); - if(val == NULL) - p->subtype = JPACKET__AVAILABLE; - else if(strcmp(val,"unavailable") == 0) - p->subtype = JPACKET__UNAVAILABLE; - else if(strcmp(val,"probe") == 0) - p->subtype = JPACKET__PROBE; - else if(strcmp(val,"error") == 0) - p->subtype = JPACKET__ERROR; - else if(strcmp(val,"invisible") == 0) - p->subtype = JPACKET__INVISIBLE; - else if(*val == 's' || *val == 'u') - p->type = JPACKET_S10N; - else if(strcmp(val,"available") == 0) - { /* someone is using type='available' which is frowned upon */ - xmlnode_hide_attrib(x,"type"); - p->subtype = JPACKET__AVAILABLE; - }else - p->type = JPACKET_UNKNOWN; - }else if(strncmp(xmlnode_get_name(x),"iq",2) == 0) - { - p->type = JPACKET_IQ; - p->iq = xmlnode_get_tag(x,"?xmlns"); - p->iqns = xmlnode_get_attrib(p->iq,"xmlns"); - } - - /* set up the jids if any, flag packet as unknown if they are unparseable */ - val = xmlnode_get_attrib(x,"to"); - if(val != NULL) - if((p->to = jid_new(p->p, val)) == NULL) - p->type = JPACKET_UNKNOWN; - val = xmlnode_get_attrib(x,"from"); - if(val != NULL) - if((p->from = jid_new(p->p, val)) == NULL) - p->type = JPACKET_UNKNOWN; + x = p->x; + memset(p, 0, sizeof(_jpacket)); + p->x = x; + p->p = xmlnode_pool(x); + + if (strncmp(xmlnode_get_name(x), "message", 7) == 0) { + p->type = JPACKET_MESSAGE; + } else if (strncmp(xmlnode_get_name(x), "presence", 8) == 0) { + p->type = JPACKET_PRESENCE; + val = xmlnode_get_attrib(x, "type"); + if (val == NULL) + p->subtype = JPACKET__AVAILABLE; + else if (strcmp(val, "unavailable") == 0) + p->subtype = JPACKET__UNAVAILABLE; + else if (strcmp(val, "probe") == 0) + p->subtype = JPACKET__PROBE; + else if (strcmp(val, "error") == 0) + p->subtype = JPACKET__ERROR; + else if (strcmp(val, "invisible") == 0) + p->subtype = JPACKET__INVISIBLE; + else if (*val == 's' || *val == 'u') + p->type = JPACKET_S10N; + else if (strcmp(val, "available") == 0) { /* someone is using type='available' which is frowned upon */ + xmlnode_hide_attrib(x, "type"); + p->subtype = JPACKET__AVAILABLE; + } else + p->type = JPACKET_UNKNOWN; + } else if (strncmp(xmlnode_get_name(x), "iq", 2) == 0) { + p->type = JPACKET_IQ; + p->iq = xmlnode_get_tag(x, "?xmlns"); + p->iqns = xmlnode_get_attrib(p->iq, "xmlns"); + } + + /* set up the jids if any, flag packet as unknown if they are unparseable */ + val = xmlnode_get_attrib(x, "to"); + if (val != NULL) + if ((p->to = jid_new(p->p, val)) == NULL) + p->type = JPACKET_UNKNOWN; + val = xmlnode_get_attrib(x, "from"); + if (val != NULL) + if ((p->from = jid_new(p->p, val)) == NULL) + p->type = JPACKET_UNKNOWN; - return p; + return p; } - int jpacket_subtype(jpacket p) { - char *type; - int ret = p->subtype; + char *type; + int ret = p->subtype; - if(ret != JPACKET__UNKNOWN) - return ret; + if (ret != JPACKET__UNKNOWN) + return ret; - ret = JPACKET__NONE; /* default, when no type attrib is specified */ - type = xmlnode_get_attrib(p->x, "type"); - if(j_strcmp(type,"error") == 0) - ret = JPACKET__ERROR; - else - switch(p->type) - { - case JPACKET_MESSAGE: - if(j_strcmp(type,"chat") == 0) - ret = JPACKET__CHAT; - else if(j_strcmp(type,"groupchat") == 0) - ret = JPACKET__GROUPCHAT; - else if(j_strcmp(type,"headline") == 0) - ret = JPACKET__HEADLINE; - break; - case JPACKET_S10N: - if(j_strcmp(type,"subscribe") == 0) - ret = JPACKET__SUBSCRIBE; - else if(j_strcmp(type,"subscribed") == 0) - ret = JPACKET__SUBSCRIBED; - else if(j_strcmp(type,"unsubscribe") == 0) - ret = JPACKET__UNSUBSCRIBE; - else if(j_strcmp(type,"unsubscribed") == 0) - ret = JPACKET__UNSUBSCRIBED; - break; - case JPACKET_IQ: - if(j_strcmp(type,"get") == 0) - ret = JPACKET__GET; - else if(j_strcmp(type,"set") == 0) - ret = JPACKET__SET; - else if(j_strcmp(type,"result") == 0) - ret = JPACKET__RESULT; - break; - } + ret = JPACKET__NONE; /* default, when no type attrib is specified */ + type = xmlnode_get_attrib(p->x, "type"); + if (j_strcmp(type, "error") == 0) + ret = JPACKET__ERROR; + else + switch (p->type) { + case JPACKET_MESSAGE: + if (j_strcmp(type, "chat") == 0) + ret = JPACKET__CHAT; + else if (j_strcmp(type, "groupchat") == 0) + ret = JPACKET__GROUPCHAT; + else if (j_strcmp(type, "headline") == 0) + ret = JPACKET__HEADLINE; + break; + case JPACKET_S10N: + if (j_strcmp(type, "subscribe") == 0) + ret = JPACKET__SUBSCRIBE; + else if (j_strcmp(type, "subscribed") == 0) + ret = JPACKET__SUBSCRIBED; + else if (j_strcmp(type, "unsubscribe") == 0) + ret = JPACKET__UNSUBSCRIBE; + else if (j_strcmp(type, "unsubscribed") == 0) + ret = JPACKET__UNSUBSCRIBED; + break; + case JPACKET_IQ: + if (j_strcmp(type, "get") == 0) + ret = JPACKET__GET; + else if (j_strcmp(type, "set") == 0) + ret = JPACKET__SET; + else if (j_strcmp(type, "result") == 0) + ret = JPACKET__RESULT; + break; + } - p->subtype = ret; - return ret; + p->subtype = ret; + return ret; } Index: jutil.c =================================================================== RCS file: /cvsroot/ayttm/ayttm/modules/jabber/libjabber/jutil.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- jutil.c 1 Apr 2003 07:24:35 -0000 1.1.1.1 +++ jutil.c 17 Sep 2009 12:04:59 -0000 1.2 @@ -44,248 +44,249 @@ /* util for making presence packets */ xmlnode jutil_presnew(int type, char *to, char *status) { - xmlnode pres; + xmlnode pres; - pres = xmlnode_new_tag("presence"); - switch(type) - { - case JPACKET__SUBSCRIBE: - xmlnode_put_attrib(pres,"type","subscribe"); - break; - case JPACKET__UNSUBSCRIBE: - xmlnode_put_attrib(pres,"type","unsubscribe"); - break; - case JPACKET__SUBSCRIBED: - xmlnode_put_attrib(pres,"type","subscribed"); - break; - case JPACKET__UNSUBSCRIBED: - xmlnode_put_attrib(pres,"type","unsubscribed"); - break; - case JPACKET__PROBE: - xmlnode_put_attrib(pres,"type","probe"); - break; - case JPACKET__UNAVAILABLE: - xmlnode_put_attrib(pres,"type","unavailable"); - break; - case JPACKET__INVISIBLE: - xmlnode_put_attrib(pres,"type","invisible"); - break; - } - if(to != NULL) - xmlnode_put_attrib(pres,"to",to); - if(status != NULL) - xmlnode_insert_cdata(xmlnode_insert_tag(pres,"status"),status,strlen(status)); + pres = xmlnode_new_tag("presence"); + switch (type) { + case JPACKET__SUBSCRIBE: + xmlnode_put_attrib(pres, "type", "subscribe"); + break; + case JPACKET__UNSUBSCRIBE: + xmlnode_put_attrib(pres, "type", "unsubscribe"); + break; + case JPACKET__SUBSCRIBED: + xmlnode_put_attrib(pres, "type", "subscribed"); + break; + case JPACKET__UNSUBSCRIBED: + xmlnode_put_attrib(pres, "type", "unsubscribed"); + break; + case JPACKET__PROBE: + xmlnode_put_attrib(pres, "type", "probe"); + break; + case JPACKET__UNAVAILABLE: + xmlnode_put_attrib(pres, "type", "unavailable"); + break; + case JPACKET__INVISIBLE: + xmlnode_put_attrib(pres, "type", "invisible"); + break; + } + if (to != NULL) + xmlnode_put_attrib(pres, "to", to); + if (status != NULL) + xmlnode_insert_cdata(xmlnode_insert_tag(pres, "status"), status, + strlen(status)); - return pres; + return pres; } /* util for making IQ packets */ xmlnode jutil_iqnew(int type, char *ns) { - xmlnode iq; + xmlnode iq; - iq = xmlnode_new_tag("iq"); - switch(type) - { - case JPACKET__GET: - xmlnode_put_attrib(iq,"type","get"); - break; - case JPACKET__SET: - xmlnode_put_attrib(iq,"type","set"); - break; - case JPACKET__RESULT: - xmlnode_put_attrib(iq,"type","result"); - break; - case JPACKET__ERROR: - xmlnode_put_attrib(iq,"type","error"); - break; - } - xmlnode_put_attrib(xmlnode_insert_tag(iq,"query"),"xmlns",ns); + iq = xmlnode_new_tag("iq"); + switch (type) { + case JPACKET__GET: + xmlnode_put_attrib(iq, "type", "get"); + break; + case JPACKET__SET: + xmlnode_put_attrib(iq, "type", "set"); + break; + case JPACKET__RESULT: + xmlnode_put_attrib(iq, "type", "result"); + break; + case JPACKET__ERROR: + xmlnode_put_attrib(iq, "type", "error"); + break; + } + xmlnode_put_attrib(xmlnode_insert_tag(iq, "query"), "xmlns", ns); - return iq; + return iq; } /* util for making message packets */ xmlnode jutil_msgnew(char *type, char *to, char *subj, char *body) { - xmlnode msg; + xmlnode msg; - msg = xmlnode_new_tag("message"); - xmlnode_put_attrib (msg, "type", type); - xmlnode_put_attrib (msg, "to", to); + msg = xmlnode_new_tag("message"); + xmlnode_put_attrib(msg, "type", type); + xmlnode_put_attrib(msg, "to", to); - if (subj) - { - xmlnode_insert_cdata (xmlnode_insert_tag (msg, "subject"), subj, strlen (subj)); - } + if (subj) { + xmlnode_insert_cdata(xmlnode_insert_tag(msg, "subject"), subj, + strlen(subj)); + } - xmlnode_insert_cdata (xmlnode_insert_tag (msg, "body"), body, strlen (body)); + xmlnode_insert_cdata(xmlnode_insert_tag(msg, "body"), body, + strlen(body)); - return msg; + return msg; } /* util for making stream packets */ -xmlnode jutil_header(char* xmlns, char* server) +xmlnode jutil_header(char *xmlns, char *server) { - xmlnode result; - if ((xmlns == NULL)||(server == NULL)) - return NULL; - result = xmlnode_new_tag("stream:stream"); - xmlnode_put_attrib(result, "xmlns:stream", "http://etherx.jabber.org/streams"); - xmlnode_put_attrib(result, "xmlns", xmlns); - xmlnode_put_attrib(result, "to", server); + xmlnode result; + if ((xmlns == NULL) || (server == NULL)) + return NULL; + result = xmlnode_new_tag("stream:stream"); + xmlnode_put_attrib(result, "xmlns:stream", + "http://etherx.jabber.org/streams"); + xmlnode_put_attrib(result, "xmlns", xmlns); + xmlnode_put_attrib(result, "to", server); - return result; + return result; } /* returns the priority on a presence packet */ int jutil_priority(xmlnode x) { - char *str; - int p; + char *str; + int p; - if(x == NULL) - return -1; + if (x == NULL) + return -1; - if(xmlnode_get_attrib(x,"type") != NULL) - return -1; + if (xmlnode_get_attrib(x, "type") != NULL) + return -1; - x = xmlnode_get_tag(x,"priority"); - if(x == NULL) - return 0; - - str = xmlnode_get_data((x)); - if(str == NULL) - return 0; - - p = atoi(str); - if(p >= 0) - return p; - else - return 0; + x = xmlnode_get_tag(x, "priority"); + if (x == NULL) + return 0; + + str = xmlnode_get_data((x)); + if (str == NULL) + return 0; + + p = atoi(str); + if (p >= 0) + return p; + else + return 0; } void jutil_tofrom(xmlnode x) { - char *to, *from; + char *to, *from; - to = xmlnode_get_attrib(x,"to"); - from = xmlnode_get_attrib(x,"from"); - xmlnode_put_attrib(x,"from",to); - xmlnode_put_attrib(x,"to",from); + to = xmlnode_get_attrib(x, "to"); + from = xmlnode_get_attrib(x, "from"); + xmlnode_put_attrib(x, "from", to); + xmlnode_put_attrib(x, "to", from); } xmlnode jutil_iqresult(xmlnode x) { - xmlnode cur; + xmlnode cur; - jutil_tofrom(x); + jutil_tofrom(x); - xmlnode_put_attrib(x,"type","result"); + xmlnode_put_attrib(x, "type", "result"); - /* hide all children of the iq, they go back empty */ - for(cur = xmlnode_get_firstchild(x); cur != NULL; cur = xmlnode_get_nextsibling(cur)) - xmlnode_hide(cur); + /* hide all children of the iq, they go back empty */ + for (cur = xmlnode_get_firstchild(x); cur != NULL; + cur = xmlnode_get_nextsibling(cur)) + xmlnode_hide(cur); - return x; + return x; } char *jutil_timestamp(void) { - time_t t; - struct tm *new_time; - static char timestamp[18]; - int ret; + time_t t; + struct tm *new_time; + static char timestamp[18]; + int ret; + + t = time(NULL); + + if (t == (time_t) - 1) + return NULL; + new_time = gmtime(&t); + + ret = snprintf(timestamp, 18, "%d%02d%02dT%02d:%02d:%02d", + 1900 + new_time->tm_year, new_time->tm_mon + 1, + new_time->tm_mday, new_time->tm_hour, new_time->tm_min, + new_time->tm_sec); - t = time(NULL); + if (ret == -1) + return NULL; - if(t == (time_t)-1) - return NULL; - new_time = gmtime(&t); - - ret = snprintf(timestamp, 18, "%d%02d%02dT%02d:%02d:%02d", 1900+new_time->tm_year, - new_time->tm_mon+1, new_time->tm_mday, new_time->tm_hour, - new_time->tm_min, new_time->tm_sec); - - if(ret == -1) - return NULL; - - return timestamp; + return timestamp; } void jutil_error(xmlnode x, terror E) { - xmlnode err; - char code[4]; + xmlnode err; + char code[4]; - xmlnode_put_attrib(x,"type","error"); - err = xmlnode_insert_tag(x,"error"); + xmlnode_put_attrib(x, "type", "error"); + err = xmlnode_insert_tag(x, "error"); - snprintf(code,4,"%d",E.code); - xmlnode_put_attrib(err,"code",code); - if(E.msg != NULL) - xmlnode_insert_cdata(err,E.msg,strlen(E.msg)); + snprintf(code, 4, "%d", E.code); + xmlnode_put_attrib(err, "code", code); + if (E.msg != NULL) + xmlnode_insert_cdata(err, E.msg, strlen(E.msg)); - jutil_tofrom(x); + jutil_tofrom(x); } void jutil_delay(xmlnode msg, char *reason) { - xmlnode delay; + xmlnode delay; - delay = xmlnode_insert_tag(msg,"x"); - xmlnode_put_attrib(delay,"xmlns",NS_DELAY); - xmlnode_put_attrib(delay,"from",xmlnode_get_attrib(msg,"to")); - xmlnode_put_attrib(delay,"stamp",jutil_timestamp()); - if(reason != NULL) - xmlnode_insert_cdata(delay,reason,strlen(reason)); + delay = xmlnode_insert_tag(msg, "x"); + xmlnode_put_attrib(delay, "xmlns", NS_DELAY); + xmlnode_put_attrib(delay, "from", xmlnode_get_attrib(msg, "to")); + xmlnode_put_attrib(delay, "stamp", jutil_timestamp()); + if (reason != NULL) + xmlnode_insert_cdata(delay, reason, strlen(reason)); } #define KEYBUF 100 char *jutil_regkey(char *key, char *seed) { - static char keydb[KEYBUF][41]; - static char seeddb[KEYBUF][41]; - static int last = -1; - char *str, strint[32]; - int i; - - /* blanket the keydb first time */ - if(last == -1) - { - last = 0; - memset(&keydb,0,KEYBUF*41); - memset(&seeddb,0,KEYBUF*41); - srand(time(NULL)); - } - - /* creation phase */ - if(key == NULL && seed != NULL) - { - /* create a random key hash and store it */ - sprintf(strint,"%d",rand()); - strcpy(keydb[last],shahash(strint)); - - /* store a hash for the seed associated w/ this key */ - strcpy(seeddb[last],shahash(seed)); - - /* return it all */ - str = keydb[last]; - last++; - if(last == KEYBUF) last = 0; - return str; - } - - /* validation phase */ - str = shahash(seed); - for(i=0;i<KEYBUF;i++) - if(j_strcmp(keydb[i],key) == 0 && j_strcmp(seeddb[i],str) == 0) - { - seeddb[i][0] = '\0'; /* invalidate this key */ - return keydb[i]; - } + static char keydb[KEYBUF][41]; + static char seeddb[KEYBUF][41]; + static int last = -1; + char *str, strint[32]; + int i; + + /* blanket the keydb first time */ + if (last == -1) { + last = 0; + memset(&keydb, 0, KEYBUF * 41); + memset(&seeddb, 0, KEYBUF * 41); + srand(time(NULL)); + } + + /* creation phase */ + if (key == NULL && seed != NULL) { + /* create a random key hash and store it */ + sprintf(strint, "%d", rand()); + strcpy(keydb[last], shahash(strint)); + + /* store a hash for the seed associated w/ this key */ + strcpy(seeddb[last], shahash(seed)); + + /* return it all */ + str = keydb[last]; + last++; + if (last == KEYBUF) + last = 0; + return str; + } + + /* validation phase */ + str = shahash(seed); + for (i = 0; i < KEYBUF; i++) + if (j_strcmp(keydb[i], key) == 0 + && j_strcmp(seeddb[i], str) == 0) { + seeddb[i][0] = '\0'; /* invalidate this key */ + return keydb[i]; + } - return NULL; + return NULL; } - Index: log.c =================================================================== RCS file: /cvsroot/ayttm/ayttm/modules/jabber/libjabber/log.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- log.c 1 Apr 2003 07:24:35 -0000 1.1.1.1 +++ log.c 17 Sep 2009 12:04:59 -0000 1.2 @@ -24,21 +24,20 @@ void jdebug(char *zone, const char *msgfmt, ...) { - va_list ap; - static char loghdr[LOGSIZE_HDR]; - static char logmsg[LOGSIZE_TAIL]; - static int size; + va_list ap; + static char loghdr[LOGSIZE_HDR]; + static char logmsg[LOGSIZE_TAIL]; + static int size; - /* XXX: We may want to check the sizes eventually */ - size = snprintf(loghdr, LOGSIZE_HDR, "debug/%s %s\n", zone, msgfmt); + /* XXX: We may want to check the sizes eventually */ + size = snprintf(loghdr, LOGSIZE_HDR, "debug/%s %s\n", zone, msgfmt); - va_start(ap, msgfmt); - size = vsnprintf(logmsg, LOGSIZE_TAIL, loghdr, ap); + va_start(ap, msgfmt); + size = vsnprintf(logmsg, LOGSIZE_TAIL, loghdr, ap); - fprintf(stderr,"%s",logmsg); + fprintf(stderr, "%s", logmsg); - return; + return; } - -#endif /* DEBUG */ +#endif /* DEBUG */ Index: pproxy.c =================================================================== RCS file: /cvsroot/ayttm/ayttm/modules/jabber/libjabber/pproxy.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- pproxy.c 1 Apr 2003 07:24:35 -0000 1.1.1.1 +++ pproxy.c 17 Sep 2009 12:04:59 -0000 1.2 @@ -45,167 +45,167 @@ ppdb _ppdb_new(pool p, jid id) { - ppdb ret; - ret = pmalloc(p,sizeof(_ppdb)); - ret->p = p; - ret->pri = -1; - ret->next = NULL; - ret->user = NULL; - ret->x = NULL; - ret->id = jid_new(p,jid_full(id)); + ppdb ret; + ret = pmalloc(p, sizeof(_ppdb)); + ret->p = p; + ret->pri = -1; + ret->next = NULL; + ret->user = NULL; + ret->x = NULL; + ret->id = jid_new(p, jid_full(id)); - return ret; + return ret; } ppdb _ppdb_get(ppdb db, jid id) { - ppdb cur; + ppdb cur; - if(db == NULL || id == NULL) return NULL; + if (db == NULL || id == NULL) + return NULL; - for(cur = db->next; cur != NULL; cur = cur->next) - if(jid_cmp(cur->id,id) == 0) return cur; + for (cur = db->next; cur != NULL; cur = cur->next) + if (jid_cmp(cur->id, id) == 0) + return cur; - return NULL; + return NULL; } ppdb ppdb_insert(ppdb db, jid id, xmlnode x) { - ppdb cur, curu; - pool p; + ppdb cur, curu; + pool p; - if(id == NULL || id->server == NULL || x == NULL) - return db; + if (id == NULL || id->server == NULL || x == NULL) + return db; - /* new ppdb list dummy holder */ - if(db == NULL) - { - p = pool_heap(1024); - db = _ppdb_new(p,NULL); - } - - cur = _ppdb_get(db,id); - - /* just update it */ - if(cur != NULL) - { - xmlnode_free(cur->x); - cur->x = xmlnode_dup(x); - cur->pri = jutil_priority(x); - return db; - } - - /* make an entry for it */ - cur = _ppdb_new(db->p,id); - cur->x = xmlnode_dup(x); - cur->pri = jutil_priority(x); - cur->next = db->next; - db->next = cur; - - /* if this is a user's resource presence, get the the user entry */ - if(id->user != NULL && (curu = _ppdb_get(db,jid_user(id))) != cur) - { - /* no user entry, make one */ - if(curu == NULL) - { - curu = _ppdb_new(db->p,jid_user(id)); - curu->next = db->next; - db->next = curu; - } - - /* insert this resource into the user list */ - cur->user = curu->user; - curu->user = cur; - } + /* new ppdb list dummy holder */ + if (db == NULL) { + p = pool_heap(1024); + db = _ppdb_new(p, NULL); + } + + cur = _ppdb_get(db, id); + + /* just update it */ + if (cur != NULL) { + xmlnode_free(cur->x); + cur->x = xmlnode_dup(x); + cur->pri = jutil_priority(x); + return db; + } + + /* make an entry for it */ + cur = _ppdb_new(db->p, id); + cur->x = xmlnode_dup(x); + cur->pri = jutil_priority(x); + cur->next = db->next; + db->next = cur; + + /* if this is a user's resource presence, get the the user entry */ + if (id->user != NULL && (curu = _ppdb_get(db, jid_user(id))) != cur) { + /* no user entry, make one */ + if (curu == NULL) { + curu = _ppdb_new(db->p, jid_user(id)); + curu->next = db->next; + db->next = curu; + } + + /* insert this resource into the user list */ + cur->user = curu->user; + curu->user = cur; + } - return db; + return db; } xmlnode ppdb_primary(ppdb db, jid id) { - ppdb cur, top; + ppdb cur, top; - if(db == NULL || id == NULL) return NULL; + if (db == NULL || id == NULL) + return NULL; - cur = _ppdb_get(db,id); + cur = _ppdb_get(db, id); - if(cur == NULL) return NULL; + if (cur == NULL) + return NULL; - /* not user@host check, just return */ - if(id->user == NULL || id->resource != NULL) return cur->x; + /* not user@host check, just return */ + if (id->user == NULL || id->resource != NULL) + return cur->x; - top = cur; - for(cur = cur->user; cur != NULL; cur = cur->user) - if(cur->pri >= top->pri) top = cur; + top = cur; + for (cur = cur->user; cur != NULL; cur = cur->user) + if (cur->pri >= top->pri) + top = cur; - if(top != NULL && top->pri >= 0) return top->x; + if (top != NULL && top->pri >= 0) + return top->x; - return NULL; + return NULL; } /* return the presence for the id, successive calls return all of the known resources for a user@host address */ xmlnode ppdb_get(ppdb db, jid id) { - static ppdb last = NULL; - ppdb cur; + static ppdb last = NULL; + ppdb cur; - if(db == NULL || id == NULL) return NULL; + if (db == NULL || id == NULL) + return NULL; - /* MODE: if this is NOT just user@host addy, return just the single entry */ - if(id->user == NULL || id->resource != NULL) - { - /* we were just here, return now */ - if(last != NULL) - { - last = NULL; - return NULL; - } - - last = _ppdb_get(db,id); - if(last != NULL) - return last->x; - else - return NULL; - } - - /* handle looping for user@host */ - - /* we're already in the loop */ - if(last != NULL) - { - /* this is the last entry in the list */ - if(last->user == NULL) - { - last = NULL; - return NULL; - } - - last = last->user; - return last->x; - } - - /* start a new loop */ - cur = _ppdb_get(db,id); - - if(cur == NULL) return NULL; - - last = cur->user; - if(last != NULL) - return last->x; - else - return NULL; + /* MODE: if this is NOT just user@host addy, return just the single entry */ + if (id->user == NULL || id->resource != NULL) { + /* we were just here, return now */ + if (last != NULL) { + last = NULL; + return NULL; + } + + last = _ppdb_get(db, id); + if (last != NULL) + return last->x; + else + return NULL; + } + + /* handle looping for user@host */ + + /* we're already in the loop */ + if (last != NULL) { + /* this is the last entry in the list */ + if (last->user == NULL) { + last = NULL; + return NULL; + } + + last = last->user; + return last->x; + } + + /* start a new loop */ + cur = _ppdb_get(db, id); + + if (cur == NULL) + return NULL; + + last = cur->user; + if (last != NULL) + return last->x; + else + return NULL; } - void ppdb_free(ppdb db) { - ppdb cur; + ppdb cur; - if(db == NULL) return; + if (db == NULL) + return; - for(cur = db; cur != NULL; cur = cur->next) - xmlnode_free(cur->x); + for (cur = db; cur != NULL; cur = cur->next) + xmlnode_free(cur->x); - pool_free(db->p); + pool_free(db->p); } - Index: rate.c =================================================================== RCS file: /cvsroot/ayttm/ayttm/modules/jabber/libjabber/rate.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- rate.c 1 Apr 2003 07:24:35 -0000 1.1.1.1 +++ rate.c 17 Sep 2009 12:04:59 -0000 1.2 @@ -43,56 +43,55 @@ jlimit jlimit_new(int maxt, int maxp) { - pool p; - jlimit r; + pool p; + jlimit r; - p = pool_new(); - r = pmalloc(p,sizeof(_jlimit)); - r->key = NULL; - r->start = r->points = 0; - r->maxt = maxt; - r->maxp = maxp; - r->p = p; + p = pool_new(); + r = pmalloc(p, sizeof(_jlimit)); + r->key = NULL; + r->start = r->points = 0; + r->maxt = maxt; + r->maxp = maxp; + r->p = p; - return r; + return r; } void jlimit_free(jlimit r) { - if(r != NULL) - { - if(r->key != NULL) free(r->key); - pool_free(r->p); - } + if (r != NULL) { + if (r->key != NULL) + free(r->key); + pool_free(r->p); + } } int jlimit_check(jlimit r, char *key, int points) { - int now = time(NULL); + int now = time(NULL); - if(r == NULL) return 0; + if (r == NULL) + return 0; - /* make sure we didn't go over the time frame or get a null/new key */ - if((now - r->start) > r->maxt || key == NULL || j_strcmp(key,r->key) != 0) - { /* start a new key */ - free(r->key); - if(key != NULL) - /* We use strdup instead of pstrdup since r->key needs to be free'd before - and more often than the rest of the rlimit structure */ - r->key = strdup(key); - else - r->key = NULL; - r->start = now; - r->points = 0; - } - - r->points += points; - - /* if we're within the time frame and over the point limit */ - if(r->points > r->maxp && (now - r->start) < r->maxt) - { - return 1; /* we don't reset the rate here, so that it remains rated until the time runs out */ - } + /* make sure we didn't go over the time frame or get a null/new key */ + if ((now - r->start) > r->maxt || key == NULL || j_strcmp(key, r->key) != 0) { /* start a new key */ + free(r->key); + if (key != NULL) + /* We use strdup instead of pstrdup since r->key needs to be free'd before + and more often than the rest of the rlimit structure */ + r->key = strdup(key); + else + r->key = NULL; + r->start = now; + r->points = 0; + } + + r->points += points; + + /* if we're within the time frame and over the point limit */ + if (r->points > r->maxp && (now - r->start) < r->maxt) { + return 1; /* we don't reset the rate here, so that it remains rated until the time runs out */ + } - return 0; + return 0; } |