|
| |||||||||||||
#include <sysdep.h>#include "libxode.h"#include "libjwgc_types.h"#include "libjwgc_debug.h"#include "libjabber_types.h"Go to the source code of this file.
Defines | |
| #define | _LIBJWGC_H_ 1 |
Functions | |
| void | JGenerateAuth () |
| int | JCheckAuth (char *str) |
| char * | JGetAuth () |
| int | contact_status_change (jabpacket packet) |
| char * | find_nickname_from_jid (char *jid) |
| char * | find_jid_from_nickname (char *nickname) |
| void | list_contacts (jwgconn jwg, char *matchstr, int strictmatch, int skipnotavail) |
| void | list_contacts_bygroup (jwgconn jwg, char *matchstr, int strictmatch, int skipnotavail) |
| void | list_agents (xode x) |
| int | update_contact_status (char *jid, char *status, char *resource) |
| void | update_nickname (char *target, char *nickname) |
| void | update_group (char *target, char *group) |
| void | remove_from_contact_list (char *contact) |
| int | test_match (char *matchstr, xode contact, int exactmatch) |
| char * | find_match (char *searchstr) |
| void | insert_into_agent_list (char *jid, char *name, char *service, int flags) |
| void | expat_startElement (void *userdata, const char *name, const char **atts) |
| void | expat_endElement (void *userdata, const char *name) |
| void | expat_charData (void *userdata, const char *s, int len) |
| xode | xode_str (char *str, int len) |
| xode | xode_file (char *file) |
| int | xode2file (char *file, xode node) |
| void | xode_put_expat_attribs (xode owner, const char **atts) |
| int | JSaveAuthPort () |
| int | JGetAuthPort () |
| void | JClearAuthPort () |
| int | JSetupComm () |
| int | JConnect () |
| void | JCleanupSocket () |
| xode | JFormHandler (xode form) |
| NAMED * | lookup (HASH_TABLE *table, KEY name, size_t createSize) |
| void | hashTableInit (HASH_TABLE *) |
| void | hashTableDestroy (HASH_TABLE *) |
| void | hashTableIterInit (HASH_TABLE_ITER *, const HASH_TABLE *) |
| NAMED * | hashTableIterNext (HASH_TABLE_ITER *) |
| int | make_netsocket (u_short port, char *host, int type) |
| int | get_netport () |
| in_addr * | make_addr (char *host) |
| int | set_fd_close_on_exec (int fd, int flag) |
| void | j_shaInit (j_SHA_CTX *ctx) |
| void | j_shaUpdate (j_SHA_CTX *ctx, unsigned char *dataIn, int len) |
| void | j_shaFinal (j_SHA_CTX *ctx, unsigned char hashout[20]) |
| void | j_shaBlock (unsigned char *dataIn, int len, unsigned char hashout[20]) |
| char * | j_shahash (char *str) |
| void | j_shahash_r (const char *str, char hashbuf[41]) |
| char * | j_strdup (const char *str) |
| char * | j_strcat (char *dest, char *txt) |
| int | j_strcmp (const char *a, const char *b) |
| int | j_strcasecmp (const char *a, const char *b) |
| int | j_strncmp (const char *a, const char *b, int i) |
| int | j_strncasecmp (const char *a, const char *b, int i) |
| int | j_strlen (const char *a) |
| int | j_atoi (const char *a, int def) |
| void | str_b64decode (char *str) |
| void | trim_message (char *str) |
| xode_spool | spool_new (xode_pool p) |
| void | spooler (xode_spool s,...) |
| char * | spool_print (xode_spool s) |
| void | spool_add (xode_spool s, char *str) |
| char * | spools (xode_pool p,...) |
| int | unicode_to_str (const char *in, char **out) |
| int | str_to_unicode (const char *in, char **out) |
| int | str_clear_unprintable (const char *in, char **out) |
| int | jVars_set_personal_var (char *var, char *value) |
| int | jVars_inset_personal_var (char *var) |
| int | jVars_init () |
| void | jVars_set_error (char *errstr) |
| char * | jVars_get_error () |
| void | jVars_set_change_handler (jVar jvar, void(*handler)()) |
| void | jVars_set_check_handler (jVar jvar, int(*handler)()) |
| void | jVars_set_show_handler (jVar jvar, int(*handler)()) |
| void | jVars_set_defaults_handler (void(*handler)()) |
| void * | jVars_get (jVar name) |
| char * | jVars_show (jVar name) |
| int | jVars_set (jVar name, void *setting) |
| char * | jVars_itos (jVar jvar) |
| jVar | jVars_stoi (char *jvar) |
| void | jVars_read_defaults () |
| jwgpacket | jwgpacket_new (xode x) |
| jwgpacket | jwgpacket_reset (jwgpacket p) |
| jwgconn | jwg_new () |
| void | jwg_delete (jwgconn j) |
| void | jwg_packet_handler (jwgconn j, jwgconn_packet_h h) |
| void | jwg_start (jwgconn j) |
| void | jwg_stop (jwgconn j) |
| int | jwg_getfd (jwgconn j) |
| void | jwg_send (jwgconn j, xode x) |
| void | jwg_servsend (jwgconn j, xode x) |
| void | jwg_send_raw (jwgconn j, const char *str) |
| void | jwg_servsend_raw (jwgconn j, const char *str) |
| void | jwg_recv (jwgconn j) |
| void | jwg_servrecv (jwgconn j) |
| void | jwg_servsuccess (jwgconn jwg, char *text) |
| void | jwg_serverror (jwgconn jwg, char *text) |
| void | jwg_poll (jwgconn j, int timeout) |
| void | jwg_servpoll (jwgconn j, int timeout) |
| jwgconn | jwg_server () |
|
|
|
|
|
Definition at line 190 of file JContact.c. References dExecution, dprintf(), jabpacket, JABPACKET__AVAILABLE, JABPACKET__UNAVAILABLE, jabpacket_struct::subtype, update_contact_status(), jabpacket_struct::x, xode, xode_get_attrib(), xode_get_data(), and xode_get_tag(). Referenced by process_presence(). 00191 {
00192 char *temp, *pos;
00193 xode x;
00194 char *from = xode_get_attrib(packet->x, "from");
00195 char *resource = "NULL";
00196 int ret = 0;
00197 if (!from) {
00198 return;
00199 }
00200
00201 pos = (char *) strchr(from, '/');
00202 if (pos) {
00203 *pos = '\0';
00204 resource = pos + 1;
00205 }
00206
00207 switch (packet->subtype) {
00208 case JABPACKET__AVAILABLE:
00209 x = xode_get_tag(packet->x, "show");
00210 if (x) {
00211 temp = xode_get_data(x);
00212 update_contact_status(from, temp, resource);
00213 ret = 1;
00214 }
00215 else {
00216 update_contact_status(from, "available", resource);
00217 ret = 1;
00218 }
00219
00220 dprintf(dExecution, "%s is available\n", from);
00221 break;
00222
00223 case JABPACKET__UNAVAILABLE:
00224 dprintf(dExecution, "%s is unavailable\n", from);
00225 update_contact_status(from, "unavailable", resource);
00226 ret = 1;
00227 break;
00228
00229 default:
00230 dprintf(dExecution, "%s is unknown(?) -> %d\n", from, packet->subtype);
00231 update_contact_status(from, "unknown", resource);
00232 ret = 1;
00233 break;
00234 }
00235 }
|
|
||||||||||||||||
|
Definition at line 81 of file JExpat.c. References xode, and xode_insert_cdata(). Referenced by xode_file(), and xode_str(). 00082 {
00083 xode *x = userdata;
00084 xode current = *x;
00085
00086 xode_insert_cdata(current, s, len);
00087 }
|
|
||||||||||||
|
Definition at line 67 of file JExpat.c. References xode_struct::complete, xode, and xode_get_parent(). Referenced by xode_file(), and xode_str(). 00068 {
00069 xode *x = userdata;
00070 xode current = *x;
00071
00072 current->complete = 1;
00073 current = xode_get_parent(current);
00074
00075 /* if it's NULL we've hit the top folks, otherwise back up a level */
00076 if (current != NULL)
00077 *x = current;
00078 }
|
|
||||||||||||||||
|
Definition at line 48 of file JExpat.c. References atts, xode, xode_insert_tag(), xode_new(), and xode_put_expat_attribs(). Referenced by xode_file(), and xode_str(). 00049 {
00050 /* get the xode pointed to by the userdata */
00051 xode *x = userdata;
00052 xode current = *x;
00053
00054 if (current == NULL) {
00055 /* allocate a base node */
00056 current = xode_new(name);
00057 xode_put_expat_attribs(current, atts);
00058 *x = current;
00059 }
00060 else {
00061 *x = xode_insert_tag(current, name);
00062 xode_put_expat_attribs(*x, atts);
00063 }
00064 }
|
|
|
Definition at line 461 of file JContact.c. References contact_list, and xode_get_attrib(). 00462 {
00463 int i;
00464 char *name;
00465
00466 for (i = 0; i < num_contacts; i++) {
00467 name = xode_get_attrib(contact_list[i], "nick");
00468 if (name && !strcasecmp(name, nickname)) {
00469 return strdup(xode_get_attrib(contact_list[i], "jid"));
00470 }
00471 }
00472
00473 return NULL;
00474 }
|
|
|
Definition at line 524 of file JContact.c. References contact_list, dMatch, dprintf(), jid, and xode_get_attrib(). Referenced by jwg_on_event_handler(). 00525 {
00526 int i;
00527 char *jid, *nick;
00528
00529 /* Try exact jid match */
00530 for (i = 0; i < num_contacts; i++) {
00531 jid = xode_get_attrib(contact_list[i], "jid");
00532 dprintf(dMatch, "Exact Match: %s = %s\n", searchstr, jid);
00533 if (!strcasecmp(jid, searchstr)) {
00534 return strdup(jid);
00535 }
00536 }
00537
00538 /* Try exact nickname match */
00539 for (i = 0; i < num_contacts; i++) {
00540 jid = xode_get_attrib(contact_list[i], "jid");
00541 nick = xode_get_attrib(contact_list[i], "nick");
00542 if (!nick) {
00543 continue;
00544 }
00545 dprintf(dMatch, "Nick Match: %s = %s\n", searchstr, nick);
00546 if (!strcasecmp(nick, searchstr)) {
00547 return strdup(jid);
00548 }
00549 }
00550
00551 /* Try begging of jid match */
00552 for (i = 0; i < num_contacts; i++) {
00553 jid = xode_get_attrib(contact_list[i], "jid");
00554 dprintf(dMatch, "Part Match: %s = %s\n", searchstr, jid);
00555 if (!strncasecmp(jid, searchstr, strlen(searchstr))) {
00556 return strdup(jid);
00557 }
00558 }
00559
00560 /* No matches, sorry */
00561 return NULL;
00562 }
|
|
|
Definition at line 477 of file JContact.c. References contact_list, jid, and xode_get_attrib(). Referenced by decode_notice(). 00478 {
00479 int i;
00480 char *name, *nick;
00481
00482 for (i = 0; i < num_contacts; i++) {
00483 name = xode_get_attrib(contact_list[i], "jid");
00484 if (name && !strcasecmp(name, jid)) {
00485 nick = xode_get_attrib(contact_list[i], "nick");
00486 if (nick) {
00487 return strdup(nick);
00488 }
00489 else {
00490 return strdup("");
00491 }
00492 }
00493 }
00494
00495 return NULL;
00496 }
|
|
|
Definition at line 57 of file JNetSock.c. 00058 {
00059 return __Xode_port;
00060 }
|
|
|
Definition at line 4286 of file xmlparse.c. References XML_Memory_Handling_Suite::free_fcn, hashTableDestroy(), HASH_TABLE::mem, HASH_TABLE::size, and HASH_TABLE::v. Referenced by hashTableDestroy(). 04287 {
04288 size_t i;
04289 for (i = 0; i < table->size; i++) {
04290 NAMED *p = table->v[i];
04291 if (p)
04292 table->mem->free_fcn(p);
04293 }
04294 if (table->v)
04295 table->mem->free_fcn(table->v);
04296 }
|
|
|
Definition at line 120 of file JHashTable.c. Referenced by hashTableInit(). 00121 {
00122 p->size = 0;
00123 p->usedLim = 0;
00124 p->used = 0;
00125 p->v = 0;
00126 }
|
|
||||||||||||
|
Definition at line 4309 of file xmlparse.c. References HASH_TABLE_ITER::end, hashTableIterInit(), HASH_TABLE_ITER::p, HASH_TABLE::size, and HASH_TABLE::v. Referenced by hashTableIterInit().
|
|
|
Definition at line 4316 of file xmlparse.c. References HASH_TABLE_ITER::end, hashTableIterNext(), and HASH_TABLE_ITER::p. Referenced by hashTableIterNext(). 04317 {
04318 while (iter->p != iter->end) {
04319 NAMED *tem = *(iter->p)++;
04320 if (tem)
04321 return tem;
04322 }
04323 return 0;
04324 }
|
|
||||||||||||||||||||
|
Definition at line 79 of file JContact.c. References agent_list, dExecution, dprintf(), jid, num_agents, xode, xode_get_attrib(), xode_insert_tag(), xode_new(), and xode_put_attrib(). Referenced by process_iq_result(). 00080 {
00081 int i, k;
00082
00083 if (!jid) {
00084 return;
00085 }
00086
00087 num_agents++;
00088 agent_list = realloc(agent_list, sizeof(xode) * (num_agents));
00089 agent_list[num_agents - 1] = malloc(sizeof(xode));
00090
00091 for (i = 0; i < (num_agents - 1) &&
00092 (strcasecmp(jid, xode_get_attrib(agent_list[i], "jid")) > 0);
00093 i++);
00094
00095 for (k = (num_agents - 1); k > i; k--) {
00096 agent_list[k] = agent_list[k - 1];
00097 }
00098
00099 agent_list[k] = xode_new("agent");
00100 xode_put_attrib(agent_list[k], "jid", jid);
00101 if (name) {
00102 xode_put_attrib(agent_list[k], "name", name);
00103 }
00104 if (service) {
00105 xode_put_attrib(agent_list[k], "service", service);
00106 }
00107 if (flags & AGENT_TRANSPORT) {
00108 xode_insert_tag(agent_list[k], "transport");
00109 }
00110 if (flags & AGENT_GROUPCHAT) {
00111 xode_insert_tag(agent_list[k], "groupchat");
00112 }
00113 if (flags & AGENT_REGISTER) {
00114 xode_insert_tag(agent_list[k], "register");
00115 }
00116 if (flags & AGENT_SEARCH) {
00117 xode_insert_tag(agent_list[k], "search");
00118 }
00119
00120 dprintf(dExecution, "Inserted %s into agent list at positiion %d\n", jid, i);
00121 }
|
|
||||||||||||
|
Definition at line 141 of file JStr.c. 00142 {
00143 if (a == NULL)
00144 return def;
00145 else
00146 return atoi(a);
00147 }
|
|
||||||||||||||||
|
Definition at line 110 of file JSha.c. References j_shaFinal(), j_shaInit(), and j_shaUpdate(). Referenced by j_shahash(), and j_shahash_r(). 00111 {
00112 j_SHA_CTX ctx;
00113
00114 j_shaInit(&ctx);
00115 j_shaUpdate(&ctx, dataIn, len);
00116 j_shaFinal(&ctx, hashout);
00117 }
|
|
||||||||||||
|
Definition at line 71 of file JSha.c. References j_SHA_CTX::H, j_shaInit(), j_shaUpdate(), j_SHA_CTX::lenW, j_SHA_CTX::sizeHi, and j_SHA_CTX::sizeLo. Referenced by j_shaBlock(). 00072 {
00073 unsigned char pad0x80 = 0x80;
00074 unsigned char pad0x00 = 0x00;
00075 unsigned char padlen[8];
00076 int i;
00077
00078 /*
00079 * Pad with a binary 1 (e.g. 0x80), then zeroes, then length
00080 */
00081 padlen[0] = (unsigned char) ((ctx->sizeHi >> 24) & 255);
00082 padlen[1] = (unsigned char) ((ctx->sizeHi >> 16) & 255);
00083 padlen[2] = (unsigned char) ((ctx->sizeHi >> 8) & 255);
00084 padlen[3] = (unsigned char) ((ctx->sizeHi >> 0) & 255);
00085 padlen[4] = (unsigned char) ((ctx->sizeLo >> 24) & 255);
00086 padlen[5] = (unsigned char) ((ctx->sizeLo >> 16) & 255);
00087 padlen[6] = (unsigned char) ((ctx->sizeLo >> 8) & 255);
00088 padlen[7] = (unsigned char) ((ctx->sizeLo >> 0) & 255);
00089 j_shaUpdate(ctx, &pad0x80, 1);
00090 while (ctx->lenW != 56)
00091 j_shaUpdate(ctx, &pad0x00, 1);
00092 j_shaUpdate(ctx, padlen, 8);
00093
00094 /*
00095 * Output hash
00096 */
00097 for (i = 0; i < 20; i++) {
00098 hashout[i] = (unsigned char) (ctx->H[i / 4] >> 24);
00099 ctx->H[i / 4] <<= 8;
00100 }
00101
00102 /*
00103 * Re-initialize the context (also zeroizes contents)
00104 */
00105 j_shaInit(ctx);
00106 }
|
|
|
Definition at line 184 of file JSha.c. References j_shaBlock(), and snprintf. Referenced by jab_auth(), and jabutil_regkey(). 00185 {
00186 static char final[41];
00187 char *pos;
00188 unsigned char hashval[20];
00189 int x;
00190
00191 if (!str || strlen(str) == 0)
00192 return NULL;
00193
00194 j_shaBlock((unsigned char *) str, strlen(str), hashval);
00195
00196 pos = final;
00197 for (x = 0; x < 20; x++) {
00198 snprintf(pos, 3, "%02x", hashval[x]);
00199 pos += 2;
00200 }
00201 return (char *) final;
00202 }
|
|
||||||||||||
|
Definition at line 205 of file JSha.c. References j_shaBlock(), and snprintf. 00206 {
00207 int x;
00208 char *pos;
00209 unsigned char hashval[20];
00210
00211 if (!str || strlen(str) == 0)
00212 return;
00213
00214 j_shaBlock((unsigned char *) str, strlen(str), hashval);
00215
00216 pos = hashbuf;
00217 for (x = 0; x < 20; x++) {
00218 snprintf(pos, 3, "%02x", hashval[x]);
00219 pos += 2;
00220 }
00221
00222 return;
00223 }
|
|
|
Definition at line 28 of file JSha.c. References j_SHA_CTX::H, j_SHA_CTX::lenW, j_SHA_CTX::sizeHi, j_SHA_CTX::sizeLo, and j_SHA_CTX::W. Referenced by j_shaBlock(), and j_shaFinal(). 00029 {
00030 int i;
00031
00032 ctx->lenW = 0;
00033 ctx->sizeHi = ctx->sizeLo = 0;
00034
00035 /*
00036 * Initialize H with the magic constants (see FIPS180 for constants)
00037 */
00038 ctx->H[0] = 0x67452301L;
00039 ctx->H[1] = 0xefcdab89L;
00040 ctx->H[2] = 0x98badcfeL;
00041 ctx->H[3] = 0x10325476L;
00042 ctx->H[4] = 0xc3d2e1f0L;
00043
00044 for (i = 0; i < 80; i++)
00045 ctx->W[i] = 0;
00046 }
|
|
||||||||||||||||
|
Definition at line 50 of file JSha.c. References j_SHA_CTX::lenW, j_SHA_CTX::sizeHi, j_SHA_CTX::sizeLo, and j_SHA_CTX::W. Referenced by j_shaBlock(), and j_shaFinal(). 00051 {
00052 int i;
00053
00054 /*
00055 * Read the data into W and process blocks as they get full
00056 */
00057 for (i = 0; i < len; i++) {
00058 ctx->W[ctx->lenW / 4] <<= 8;
00059 ctx->W[ctx->lenW / 4] |= (unsigned long) dataIn[i];
00060 if ((++ctx->lenW) % 64 == 0) {
00061 j_shaHashBlock(ctx);
00062 ctx->lenW = 0;
00063 }
00064 ctx->sizeLo += 8;
00065 ctx->sizeHi += (ctx->sizeLo < 8);
00066 }
00067 }
|
|
||||||||||||
|
Definition at line 105 of file JStr.c. References NULL. 00106 {
00107 if (a == NULL || b == NULL)
00108 return -1;
00109 else
00110 return strcasecmp(a, b);
00111 }
|
|
||||||||||||
|
Definition at line 75 of file JStr.c. Referenced by spool_print(). 00076 {
00077 if (!txt)
00078 return (dest);
00079
00080 while (*txt)
00081 *dest++ = *txt++;
00082 *dest = '\0';
00083
00084 return (dest);
00085 }
|
|
||||||||||||
|
Definition at line 88 of file JStr.c. References NULL. Referenced by jabpacket_subtype(), and jabutil_regkey(). 00089 {
00090 if (a == NULL || b == NULL)
00091 return -1;
00092
00093 while (*a == *b && *a != '\0' && *b != '\0') {
00094 a++;
00095 b++;
00096 }
00097
00098 if (*a == *b)
00099 return 0;
00100
00101 return -1;
00102 }
|
|
|
Definition at line 66 of file JStr.c. 00067 {
00068 if (str == NULL)
00069 return NULL;
00070 else
00071 return strdup(str);
00072 }
|
|
|
Definition at line 132 of file JStr.c. 00133 {
00134 if (a == NULL)
00135 return 0;
00136 else
00137 return strlen(a);
00138 }
|
|
||||||||||||||||
|
Definition at line 123 of file JStr.c. References NULL. 00124 {
00125 if (a == NULL || b == NULL)
00126 return -1;
00127 else
00128 return strncasecmp(a, b, i);
00129 }
|
|
||||||||||||||||
|
Definition at line 114 of file JStr.c. References NULL. 00115 {
00116 if (a == NULL || b == NULL)
00117 return -1;
00118 else
00119 return strncmp(a, b, i);
00120 }
|
|
|
|
|
|
Definition at line 93 of file JFile.c. References getenv(). Referenced by jabber_finalize(). 00094 {
00095 char savefile[MAXNAMLEN];
00096 FILE *savefd;
00097 char *envptr;
00098
00099 envptr = getenv("JWGCSCK");
00100 if (!envptr) {
00101 (void) sprintf(savefile, "/tmp/jwgcsck.%d", getuid());
00102 envptr = savefile;
00103 }
00104 unlink(envptr);
00105 }
|
|
|
|
|
|
Definition at line 54 of file JFile.c. References getenv(). Referenced by jwg_start(). 00055 {
00056 int sock;
00057 struct sockaddr_un sockaddr;
00058 char file[MAXNAMLEN];
00059 struct linger li;
00060 char *envptr;
00061
00062 li.l_onoff = 1;
00063 li.l_linger = 900;
00064
00065 sock = socket(AF_UNIX, SOCK_STREAM, 0);
00066 if (sock < 0) {
00067 return -1;
00068 }
00069 envptr = getenv("JWGCSCK");
00070 if (!envptr) {
00071 (void) sprintf(file, "/tmp/jwgcsck.%d", getuid());
00072 envptr = file;
00073 }
00074 sockaddr.sun_family = AF_UNIX;
00075
00076 strcpy(sockaddr.sun_path, envptr);
00077 if (connect(sock, (struct sockaddr *)&sockaddr,
00078 strlen(sockaddr.sun_path)+1 + sizeof(sockaddr.sun_family))
00079 < 0) {
00080 return -1;
00081 }
00082
00083 if (setsockopt(sock, SOL_SOCKET, SO_LINGER, (char *)&li, sizeof(li))
00084 == -1) {
00085 return -1;
00086 }
00087
00088
00089 return sock;
00090 }
|
|
|
Definition at line 901 of file JForm.c. References display_form(), ns, NS_DATA, process_choice(), xode, xode_get_attrib(), xode_get_tag(), xode_insert_tag(), xode_new(), and xode_put_attrib(). Referenced by jctl_on_event_handler(). 00902 {
00903 xode baseform, filledform, query, x;
00904 char *ns, *type;
00905 char bfr[100];
00906
00907 ns = xode_get_attrib(form, "xmlns");
00908 if (!ns) {
00909 printf("Invalid form returned, no query namespace.\n");
00910 return NULL;
00911 }
00912
00913 baseform = xode_new("query");
00914 xode_put_attrib(baseform, "xmlns", ns);
00915
00916 type = ns = NULL;
00917
00918 x = xode_get_tag(form, "x");
00919 if (x) {
00920 type = xode_get_attrib(x, "type");
00921 }
00922
00923 if (type && !strcmp(type, "form")) {
00924 filledform = xode_insert_tag(baseform, "x");
00925 xode_put_attrib(filledform, "xmlns", NS_DATA);
00926 xode_put_attrib(filledform, "type", "submit");
00927 }
00928 else {
00929 filledform = baseform;
00930 }
00931
00932 for (;;) {
00933 filledform = display_form(form, filledform);
00934 printf("\n");
00935 printf("Enter a letter id to modify, 'submit' to submit, or 'cancel' to cancel.\n");
00936 printf("Command: ");
00937 fflush(stdout);
00938
00939 if (!fgets(bfr, sizeof(bfr), stdin)) {
00940 break;
00941 }
00942
00943 printf("\n");
00944 bfr[strlen(bfr) - 1] = '\0';
00945
00946 if (!strncmp(bfr, "cancel", 6)) {
00947 return NULL;
00948 }
00949 else if (!strncmp(bfr, "submit", 6)) {
00950 break;
00951 }
00952 else if (strlen(bfr) > 1) {
00953 continue;
00954 }
00955 else {
00956 filledform = process_choice(bfr, form, filledform);
00957 }
00958 }
00959
00960 return baseform;
00961 }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Definition at line 7 of file JFile.c. References getenv(). Referenced by jwg_servstart(). 00008 {
00009 mode_t prevmode;
00010 int sock;
00011 struct sockaddr_un sockaddr;
00012 char file[MAXNAMLEN];
00013 struct linger li;
00014 char *envptr;
00015
00016 li.l_onoff = 1;
00017 li.l_linger = 900;
00018
00019 prevmode = umask(S_IRWXO|S_IRWXG);
00020 sock = socket(AF_UNIX, SOCK_STREAM, 0);
00021 if (sock < 0) {
00022 return -1;
00023 }
00024 envptr = getenv("JWGCSCK");
00025 if (!envptr) {
00026 (void) sprintf(file, "/tmp/jwgcsck.%d", getuid());
00027 envptr = file;
00028 }
00029 unlink(envptr);
00030
00031 sockaddr.sun_family = AF_UNIX;
00032 strcpy(sockaddr.sun_path, envptr);
00033 if (bind(sock, (struct sockaddr *)&sockaddr,
00034 strlen(sockaddr.sun_path)+1 + sizeof(sockaddr.sun_family))
00035 < 0) {
00036 return -1;
00037 }
00038 if (listen(sock, 10) < 0) {
00039 return -1;
00040 }
00041
00042 if (setsockopt(sock, SOL_SOCKET, SO_LINGER, (char *)&li, sizeof(li))
00043 == -1) {
00044 return -1;
00045 }
00046
00047
00048 umask(prevmode);
00049
00050 return sock;
00051 }
|
|
|
Definition at line 293 of file JVariables.c. References jNumVars, and jVars_contents. Referenced by eval_expr(), fake_startup_packet(), jab_on_state_handler(), jabber_init(), jabutil_presnew(), jwg_on_event_handler(), jwgc_change_presence_event_handler(), main(), and run_initprogs(). 00295 {
00296 if (name >= jNumVars || name < 0) {
00297 return NULL;
00298 }
00299
00300 if (jVars_contents[name]) {
00301 return jVars_contents[name];
00302 }
00303 else {
00304 return NULL;
00305 }
00306 }
|
|
|
Definition at line 251 of file JVariables.c. Referenced by jwg_on_event_handler(). 00252 {
00253 if (varerrorstr) {
00254 return varerrorstr;
00255 }
00256 else {
00257 return NULL;
00258 }
00259 }
|
|
|
Definition at line 147 of file JVariables.c. References DEFVARS, dprintf(), dVars, FIXEDVARS, getenv(), jVar, jVars_contents, jVars_fixed, jVars_read_defaults(), jVars_set_error(), jVars_strings, jVars_types, USRVARS, varerrorstr, varfiledefaults, varfilefixed, and varfilepersonal. Referenced by main(). 00148 {
00149 jVar i;
00150 struct passwd *pwd;
00151 char *envptr, *homedir;
00152
00153 dprintf(dVars, "Initializing variable manager...\n");
00154
00155 varfiledefaults = NULL;
00156 varfilefixed = NULL;
00157 varfilepersonal = NULL;
00158 varerrorstr = NULL;
00159
00160 for (i = 0; i < jNumVars; i++) {
00161 jVars_fixed[i] = 0;
00162 jVars_contents[i] = NULL;
00163 jVars_check_handler[i] = NULL;
00164 jVars_change_handler[i] = NULL;
00165 jVars_show_handler[i] = NULL;
00166 }
00167
00168 if ((envptr = (char *) getenv("HOME"))) {
00169 homedir = strdup(envptr);
00170 }
00171 else {
00172 if (!(pwd = getpwuid((int) getuid()))) {
00173 jVars_set_error("Can't find your entry in /etc/passwd.");
00174 return 0;
00175 }
00176 homedir = strdup(pwd->pw_dir);
00177 }
00178
00179 varfilepersonal = (char *)malloc(sizeof(char) *
00180 (strlen(homedir) + 1 + strlen(USRVARS) + 1));
00181 strcpy(varfilepersonal, homedir);
00182 strcat(varfilepersonal, "/");
00183 strcat(varfilepersonal, USRVARS);
00184
00185 varfilefixed = (char *)malloc(strlen(DATADIR) + strlen(FIXEDVARS) + 2);
00186 sprintf(varfilefixed, "%s/%s", DATADIR, FIXEDVARS);
00187
00188 varfiledefaults = (char *)malloc(strlen(DATADIR) + strlen(DEFVARS) + 2);
00189 sprintf(varfiledefaults, "%s/%s", DATADIR, DEFVARS);
00190
00191 jVars_strings[jVarUsername] = "username";
00192 jVars_types[jVarUsername] = jTypeString;
00193
00194 jVars_strings[jVarPassword] = "password";
00195 jVars_types[jVarPassword] = jTypeString;
00196
00197 jVars_strings[jVarServer] = "server";
00198 jVars_types[jVarServer] = jTypeString;
00199
00200 jVars_strings[jVarResource] = "resource";
00201 jVars_types[jVarResource] = jTypeString;
00202
00203 jVars_strings[jVarPort] = "port";
00204 jVars_types[jVarPort] = jTypeNumber;
00205
00206 jVars_strings[jVarPriority] = "priority";
00207 jVars_types[jVarPriority] = jTypeNumber;
00208
00209 #ifdef USE_SSL
00210 jVars_strings[jVarUseSSL] = "usessl";
00211 jVars_types[jVarUseSSL] = jTypeBool;
00212 #endif /* USE_SSL */
00213
00214 jVars_strings[jVarInitProgs] = "initprogs";
00215 jVars_types[jVarInitProgs] = jTypeString;
00216
00217 jVars_strings[jVarJID] = "jid";
00218 jVars_types[jVarJID] = jTypeString;
00219
00220 jVars_strings[jVarPresence] = "presence";
00221 jVars_types[jVarPresence] = jTypeString;
00222
00223 #ifdef USE_GPGME
00224 jVars_strings[jVarUseGPG] = "usegpg";
00225 jVars_types[jVarUseGPG] = jTypeBool;
00226
00227 jVars_strings[jVarGPGPass] = "gpgpass";
00228 jVars_types[jVarGPGPass] = jTypeString;
00229
00230 jVars_strings[jVarGPGKeyID] = "gpgkeyid";
00231 jVars_types[jVarGPGKeyID] = jTypeString;
00232 #endif /* USE_GPGME */
00233
00234 if (*jVars_defaults_handler) {
00235 jVars_defaults_handler();
00236 }
00237 jVars_read_defaults();
00238
00239 return 1;
00240 }
|
|
|
|
|
|
Definition at line 398 of file JVariables.c. References jVars_strings. 00400 {
00401 return jVars_strings[jvar];
00402 }
|
|
|
Definition at line 483 of file JVariables.c. References dprintf(), dVars, jVars_read_conf(), varfiledefaults, varfilefixed, and varfilepersonal. Referenced by jVars_init(). 00484 {
00485 dprintf(dVars, "Reading defaults\n");
00486 jVars_read_conf(varfilefixed, 1);
00487 jVars_read_conf(varfiledefaults, 0);
00488 if (varfilepersonal) {
00489 jVars_read_conf(varfilepersonal, 0);
00490 }
00491 }
|
|
||||||||||||
|
Definition at line 333 of file JVariables.c. References jVars_contents, jVars_fixed, jVars_set_error(), and jVars_types. Referenced by jVars_read_conf(), jwg_on_event_handler(), jwg_set_defaults_handler(), jwgc_change_resource_event_handler(), and main(). 00336 {
00337 void *oldsetting;
00338
00339 if (name < 0 || name >= jNumVars) {
00340 jVars_set_error("Variable does not exist.");
00341 return 0;
00342 }
00343
00344 if (!setting) {
00345 jVars_set_error("No setting specified.");
00346 return 0;
00347 }
00348
00349 if (*jVars_check_handler[name]) {
00350 if (!(jVars_check_handler[name] (setting))) {
00351 /* handler is expected to set error */
00352 return 0;
00353 }
00354 }
00355
00356 if (jVars_fixed[name]) {
00357 jVars_set_error("The variable you've selected can not be changed.");
00358 return 0;
00359 }
00360 else {
00361 oldsetting = jVars_contents[name];
00362 if (jVars_types[name] == jTypeString) {
00363 jVars_contents[name] = strdup(setting);
00364 }
00365 else if (jVars_types[name] == jTypeNumber) {
00366 int *intset;
00367 intset = (int *)malloc(sizeof(int));
00368 *intset = atoi(setting);
00369 jVars_contents[name] = intset;
00370 }
00371 else if (jVars_types[name] == jTypeBool) {
00372 int *intset;
00373 intset = (int *)malloc(sizeof(int));
00374 *intset = 0;
00375 if (!strcmp(setting, "on")
00376 || !strcmp(setting, "enable")
00377 || !strcmp(setting, "enabled")
00378 || !strcmp(setting, "true")
00379 || !strcmp(setting, "1")) {
00380 *intset = 1;
00381 }
00382 jVars_contents[name] = intset;
00383 }
00384
00385 if (*jVars_change_handler[name]) {
00386 jVars_change_handler[name] (oldsetting, jVars_contents[name]);
00387 }
00388
00389 if (oldsetting != NULL) {
00390 free(oldsetting);
00391 }
00392 }
00393
00394 return 1;
00395 }
|
|
||||||||||||
|
Definition at line 262 of file JVariables.c. Referenced by setup_jwgc_variable_handlers(). 00265 {
00266 jVars_change_handler[jvar] = handler;
00267 }
|
|
||||||||||||
|
Definition at line 270 of file JVariables.c. Referenced by setup_jwgc_variable_handlers(). 00273 {
00274 jVars_check_handler[jvar] = handler;
00275 }
|
|
|
Definition at line 286 of file JVariables.c. Referenced by main(). 00288 {
00289 jVars_defaults_handler = handler;
00290 }
|
|
|
Definition at line 243 of file JVariables.c. References varerrorstr. 00245 {
00246 if (varerrorstr) { free(varerrorstr); }
00247 varerrorstr = strdup(errorstr);
00248 }
|
|
||||||||||||
|
Definition at line 65 of file JVariables.c. References varfilepersonal. 00068 {
00069 int written;
00070 FILE *fpin, *fpout;
00071 char *varfilebackup, varbfr[512];
00072
00073 written = 0;
00074
00075 if (!varfilepersonal)
00076 return 0;
00077
00078 varfilebackup = (char *)malloc(sizeof(char) *
00079 (strlen(varfilepersonal) + 7 + 1));
00080 strcpy(varfilebackup, varfilepersonal);
00081 strcat(varfilebackup, ".backup");
00082
00083 if (!(fpout = fopen(varfilebackup, "w")))
00084 return 0;
00085
00086 if ((fpin = fopen(varfilepersonal, "r")) != NULL) {
00087 while (fgets(varbfr, sizeof varbfr, fpin) != (char *) 0) {
00088 varbfr[511] = '\0';
00089
00090 if (varline(varbfr, var)) {
00091 fprintf(fpout, "%s = %s\n", var, value);
00092 written = 1;
00093 }
00094 else
00095 fprintf(fpout, "%s\n", varbfr);
00096 }
00097 fclose(fpin);
00098 }
00099
00100 if (!written)
00101 fprintf(fpout, "%s = %s\n", var, value);
00102
00103 if (fclose(fpout) == EOF)
00104 return 0;
00105
00106 if (rename(varfilebackup, varfilepersonal))
00107 return 0;
00108
00109 return 1;
00110 }
|
|
||||||||||||
|
Definition at line 278 of file JVariables.c. Referenced by setup_jwgc_variable_handlers(). 00281 {
00282 jVars_show_handler[jvar] = handler;
00283 }
|
|
|
Definition at line 309 of file JVariables.c. References jNumVars, jVars_contents, and jVars_set_error(). Referenced by jwg_on_event_handler(). 00311 {
00312 if (name >= jNumVars || name < 0) {
00313 jVars_set_error("Variable unknown.");
00314 return NULL;
00315 }
00316
00317 if (*jVars_show_handler[name]) {
00318 if (!(jVars_show_handler[name] ())) {
00319 /* handler is expected to set error */
00320 return NULL;
00321 }
00322 }
00323
00324 if (jVars_contents[name]) {
00325 return jVars_contents[name];
00326 }
00327 else {
00328 return (char *)"<not set>";
00329 }
00330 }
|
|
|
Definition at line 405 of file JVariables.c. References jVar, and jVars_strings. Referenced by eval_expr(), jVars_read_conf(), and jwg_on_event_handler(). 00407 {
00408 jVar i;
00409
00410 for (i = 0; i < jNumVars; i++) {
00411 if (!strcmp(jvar, jVars_strings[i])) {
00412 return i;
00413 }
00414 }
00415
00416 return -1;
00417 }
|
|
|
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 }
|
|
|
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 }
|
|
|
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 }
|
|
||||||||||||
|
|
|
||||||||||||
|
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 }
|
|
|
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 }
|
|
||||||||||||
|
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 }
|
|
||||||||||||
|
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 }
|
|
|
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 }
|
|
||||||||||||
|
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 }
|
|
||||||||||||
|
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 }
|
|
|
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 }
|
|
||||||||||||
|
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 }
|
|
||||||||||||
|
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 }
|
|
||||||||||||
|
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 }
|
|
|
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 }
|
|
|
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 }
|
|
|
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 }
|
|
|
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 }
|
|
|
Definition at line 420 of file JContact.c. References agent_list, xode, xode_dup(), xode_insert_node(), and xode_insert_tag(). Referenced by show_status(). 00421 {
00422 int i;
00423 xode y, z;
00424
00425 y = xode_insert_tag(x, "agents");
00426 for (i = 0; i < num_agents; i++) {
00427 z = xode_dup(agent_list[i]);
00428 xode_insert_node(y, z);
00429 }
00430 }
|
|
||||||||||||||||||||
|
Definition at line 238 of file JContact.c. References contact_list, dprintf(), dXML, jwg_servsend(), jwgconn, test_match(), xode, xode_dup(), xode_free(), xode_get_attrib(), xode_get_firstchild(), xode_get_nextsibling(), xode_get_tag(), xode_has_children(), xode_hide(), xode_insert_node(), xode_new(), and xode_to_prettystr(). Referenced by jwg_on_event_handler(). 00243 {
00244 int i, k;
00245 xode x, y, ny, z, r, nr;
00246
00247 x = xode_new("contacts");
00248 for (i = 0; i < num_contacts; i++) {
00249 y = xode_dup(contact_list[i]);
00250 xode_insert_node(x, y);
00251 }
00252
00253 if (matchstr) {
00254 ny = y = xode_get_firstchild(x);
00255 while (ny) {
00256 ny = xode_get_nextsibling(ny);
00257 if (!test_match(matchstr, y, strictmatch)) {
00258 dprintf(dXML, "HIDE-A:\n%s\n",
00259 xode_to_prettystr(y));
00260 xode_hide(y);
00261 }
00262 y = ny;
00263 }
00264 }
00265
00266 if (skipnotavail) {
00267 ny = y = xode_get_firstchild(x);
00268 while (ny) {
00269 z = xode_get_tag(y, "resources");
00270 nr = r = xode_get_firstchild(z);
00271 while (nr) {
00272 char *curstatus;
00273 nr = xode_get_nextsibling(nr);
00274 curstatus = xode_get_attrib(r, "status");
00275 if (!curstatus || !strcmp(curstatus,
00276 "unavailable")) {
00277 dprintf(dXML, "HIDE-B:\n%s\n",
00278 xode_to_prettystr(r));
00279 xode_hide(r);
00280 }
00281 r = nr;
00282 }
00283 ny = xode_get_nextsibling(ny);
00284 if (!xode_has_children(z)) {
00285 dprintf(dXML, "HIDE-C:\n%s\n",
00286 xode_to_prettystr(y));
00287 xode_hide(y);
00288 }
00289 y = ny;
00290 }
00291 }
00292
00293 jwg_servsend(jwg, x);
00294 xode_free(x);
00295 }
|
|
||||||||||||||||||||
|
Definition at line 322 of file JContact.c. References contact_list, dprintf(), dXML, find_contact_group(), jwg_servsend(), jwgconn, test_match(), xode, xode_dup(), xode_free(), xode_get_attrib(), xode_get_firstchild(), xode_get_nextsibling(), xode_get_tag(), xode_has_children(), xode_hide(), xode_hide_attrib(), xode_insert_node(), xode_insert_tag(), xode_new(), xode_put_attrib(), and xode_to_prettystr(). Referenced by jwg_on_event_handler(). 00327 {
00328 int i, k;
00329 xode x, y, ny, z, r, nr, g, ng;
00330 char *group;
00331
00332 x = xode_new("contacts");
00333 for (i = 0; i < num_contacts; i++) {
00334 y = xode_dup(contact_list[i]);
00335 group = xode_get_attrib(y, "group");
00336 if (!group) {
00337 group = "Unknown";
00338 }
00339 z = find_contact_group(x, group);
00340 if (!z) {
00341 z = xode_insert_tag(x, "group");
00342 xode_put_attrib(z, "name", group);
00343 }
00344 xode_hide_attrib(y, "group");
00345 xode_insert_node(z, y);
00346 }
00347
00348 if (matchstr) {
00349 ng = g = xode_get_firstchild(x);
00350 while (ng) {
00351 ny = y = xode_get_firstchild(g);
00352 while (ny) {
00353 ny = xode_get_nextsibling(y);
00354 if (!test_match(matchstr, y, strictmatch)) {
00355 dprintf(dXML,
00356 "HIDE-D:\n%s\n",
00357 xode_to_prettystr(y));
00358 xode_hide(y);
00359 }
00360 y = ny;
00361 }
00362
00363 ng = xode_get_nextsibling(ng);
00364 if (!xode_has_children(g)) {
00365 dprintf(dXML, "HIDE-E:\n%s\n",
00366 xode_to_prettystr(g));
00367 xode_hide(g);
00368 }
00369 g = ng;
00370 }
00371 }
00372
00373 if (skipnotavail) {
00374 ng = g = xode_get_firstchild(x);
00375 while (ng) {
00376 ny = y = xode_get_firstchild(g);
00377 while (ny) {
00378 z = xode_get_tag(y, "resources");
00379 nr = r = xode_get_firstchild(z);
00380 while (nr) {
00381 char *curstatus;
00382 nr = xode_get_nextsibling(nr);
00383 curstatus = xode_get_attrib(r,
00384 "status");
00385 if (!curstatus || !strcmp(curstatus,
00386 "unavailable")) {
00387 dprintf(dXML,
00388 "HIDE-F:\n%s\n",
00389 xode_to_prettystr(r));
00390 xode_hide(r);
00391 }
00392 r = nr;
00393 }
00394
00395 ny = xode_get_nextsibling(ny);
00396 if (!xode_has_children(z)) {
00397 dprintf(dXML,
00398 "HIDE-G:\n%s\n",
00399 xode_to_prettystr(y));
00400 xode_hide(y);
00401 }
00402 y = ny;
00403 }
00404
00405 ng = xode_get_nextsibling(ng);
00406 if (!xode_has_children(g)) {
00407 dprintf(dXML, "HIDE-H:\n%s\n",
00408 xode_to_prettystr(g));
00409 xode_hide(g);
00410 }
00411 g = ng;
00412 }
00413 }
00414
00415 jwg_servsend(jwg, x);
00416 xode_free(x);
00417 }
|
|
||||||||||||||||
|
Definition at line 4222 of file xmlparse.c. References XML_Memory_Handling_Suite::free_fcn, INIT_SIZE, lookup(), XML_Memory_Handling_Suite::malloc_fcn, HASH_TABLE::mem, NAMED::name, HASH_TABLE::size, HASH_TABLE::used, HASH_TABLE::usedLim, and HASH_TABLE::v. Referenced by lookup(), and substitute(). 04223 {
04224 size_t i;
04225 if (table->size == 0) {
04226 size_t tsize;
04227
04228 if (!createSize)
04229 return 0;
04230 tsize = INIT_SIZE * sizeof(NAMED *);
04231 table->v = table->mem->malloc_fcn(tsize);
04232 if (!table->v)
04233 return 0;
04234 memset(table->v, 0, tsize);
04235 table->size = INIT_SIZE;
04236 table->usedLim = INIT_SIZE / 2;
04237 i = hash(name) & (table->size - 1);
04238 }
04239 else {
04240 unsigned long h = hash(name);
04241 for (i = h & (table->size - 1);
04242 table->v[i];
04243 i == 0 ? i = table->size - 1 : --i) {
04244 if (keyeq(name, table->v[i]->name))
04245 return table->v[i];
04246 }
04247 if (!createSize)
04248 return 0;
04249 if (table->used == table->usedLim) {
04250 /* check for overflow */
04251 size_t newSize = table->size * 2;
04252 size_t tsize = newSize * sizeof(NAMED *);
04253 NAMED **newV = table->mem->malloc_fcn(tsize);
04254 if (!newV)
04255 return 0;
04256 memset(newV, 0, tsize);
04257 for (i = 0; i < table->size; i++)
04258 if (table->v[i]) {
04259 size_t j;
04260 for (j = hash(table->v[i]->name) & (newSize - 1);
04261 newV[j];
04262 j == 0 ? j = newSize - 1 : --j)
04263 ;
04264 newV[j] = table->v[i];
04265 }
04266 table->mem->free_fcn(table->v);
04267 table->v = newV;
04268 table->size = newSize;
04269 table->usedLim = newSize/2;
04270 for (i = h & (table->size - 1);
04271 table->v[i];
04272 i == 0 ? i = table->size - 1 : --i)
04273 ;
04274 }
04275 }
04276 table->v[i] = table->mem->malloc_fcn(createSize);
04277 if (!table->v[i])
04278 return 0;
04279 memset(table->v[i], 0, createSize);
04280 table->v[i]->name = name;
04281 (table->used)++;
04282 return table->v[i];
04283 }
|
|
|
Definition at line 141 of file JNetSock.c. References MAXHOSTNAMELEN, and NULL. Referenced by make_netsocket(). 00142 {
00143 struct hostent *hp;
00144 static struct in_addr addr;
00145 char myname[MAXHOSTNAMELEN + 1];
00146
00147 if (host == NULL || strlen(host) == 0) {
00148 gethostname(myname, MAXHOSTNAMELEN);
00149 hp = gethostbyname(myname);
00150 if (hp != NULL) {
00151 return (struct in_addr *) * hp->h_addr_list;
00152 }
00153 }
00154 else {
00155 addr.s_addr = inet_addr(host);
00156 if (addr.s_addr != -1) {
00157 return &addr;
00158 }
00159 hp = gethostbyname(host);
00160 if (hp != NULL) {
00161 return (struct in_addr *) * hp->h_addr_list;
00162 }
00163 }
00164 return NULL;
00165 }
|
|
||||||||||||||||
|
Definition at line 63 of file JNetSock.c. References __Xode_port, make_addr(), and NULL. Referenced by jab_start(). 00064 {
00065 int s, flag = 1;
00066 struct sockaddr_in sa;
00067 struct in_addr *saddr;
00068 int socket_type, len;
00069
00070 /* is this a UDP socket or a TCP socket? */
00071 socket_type = (type == NETSOCKET_UDP) ? SOCK_DGRAM : SOCK_STREAM;
00072
00073 bzero((void *) &sa, sizeof(struct sockaddr_in));
00074
00075 if ((s = socket(AF_INET, socket_type, 0)) < 0)
00076 return (-1);
00077 if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char *) &flag, sizeof(flag)) < 0)
00078 return (-1);
00079
00080 saddr = make_addr(host);
00081 if (saddr == NULL && type != NETSOCKET_UDP)
00082 return (-1);
00083 sa.sin_family = AF_INET;
00084 sa.sin_port = htons(port);
00085
00086 if (type == NETSOCKET_SERVER) {
00087 /* bind to specific address if specified */
00088 if (host != NULL)
00089 sa.sin_addr.s_addr = saddr->s_addr;
00090
00091 if (bind(s, (struct sockaddr *) & sa, sizeof sa) < 0) {
00092 close(s);
00093 return (-1);
00094 }
00095
00096 if (!sa.sin_port) {
00097 len = sizeof(sa);
00098 if (getsockname(s, (struct sockaddr *) & sa, &len) < 0) {
00099 close(s);
00100 return (-1);
00101 }
00102 }
00103
00104 if (listen(s, 10) < 0) {
00105 close(s);
00106 return (-1);
00107 }
00108
00109 __Xode_port = ntohs(sa.sin_port);
00110 }
00111 if (type == NETSOCKET_CLIENT) {
00112 sa.sin_addr.s_addr = saddr->s_addr;
00113 if (connect(s, (struct sockaddr *) & sa, sizeof sa) < 0) {
00114 close(s);
00115 return (-1);
00116 }
00117 }
00118 if (type == NETSOCKET_UDP) {
00119 /* bind to all addresses for now */
00120 if (bind(s, (struct sockaddr *) & sa, sizeof sa) < 0) {
00121 close(s);
00122 return (-1);
00123 }
00124
00125 /* if specified, use a default recipient for read/write */
00126 if (host != NULL && saddr != NULL) {
00127 sa.sin_addr.s_addr = saddr->s_addr;
00128 if (connect(s, (struct sockaddr *) & sa, sizeof sa) < 0) {
00129 close(s);
00130 return (-1);
00131 }
00132 }
00133 }
00134
00135
00136 return (s);
00137 }
|
|
|
Definition at line 56 of file JContact.c. References contact_list, dExecution, dprintf(), num_contacts, and xode_get_attrib(). Referenced by jwg_on_event_handler(), and process_iq_set(). 00057 {
00058 int i;
00059 int k;
00060
00061 for (i = 0; i < num_contacts &&
00062 (strcasecmp(contact, xode_get_attrib(contact_list[i], "jid")) != 0);
00063 i++);
00064
00065 if (i == num_contacts) {
00066 return;
00067 }
00068
00069 free(contact_list[i]);
00070 for (k = i; k < (num_contacts - 1); k++) {
00071 contact_list[k] = contact_list[k + 1];
00072 }
00073 num_contacts--;
00074
00075 dprintf(dExecution, "Removed %s from contact list at position %d\n", contact, i);
00076 }
|
|
||||||||||||
|
Definition at line 172 of file JNetSock.c. 00173 {
00174 int oldflags = fcntl(fd, F_GETFL);
00175 int newflags;
00176
00177 if (flag)
00178 newflags = oldflags | FD_CLOEXEC;
00179 else
00180 newflags = oldflags & (~FD_CLOEXEC);
00181
00182 if (newflags == oldflags)
00183 return 0;
00184 return fcntl(fd, F_SETFL, (long) newflags);
00185 }
|
|
||||||||||||
|
|
|
|
|
|
|
Definition at line 164 of file JStr.c. References xode_spool_node::c, xode_spool_struct::first, j_strcat(), xode_spool_struct::len, xode_spool_node::next, NULL, xode_spool_struct::p, xode_pool_malloc(), and xode_spool. Referenced by spools(). 00165 {
00166 char *ret, *tmp;
00167 struct xode_spool_node *next;
00168
00169 if (s == NULL || s->len == 0 || s->first == NULL)
00170 return NULL;
00171
00172 ret = xode_pool_malloc(s->p, s->len + 1);
00173 *ret = '\0';
00174
00175 next = s->first;
00176 tmp = ret;
00177 while (next != NULL) {
00178 tmp = j_strcat(tmp, next->c);
00179 next = next->next;
00180 }
00181
00182 return ret;
00183 }
|
|
||||||||||||
|
|
|
||||||||||||
|
Definition at line 187 of file JStr.c. References spool_print(), xode_pool, xode_spool, xode_spool_add(), and xode_spool_newfrompool(). Referenced by xode2file(). 00188 {
00189 va_list ap;
00190 xode_spool s;
00191 char *arg = NULL;
00192
00193 if (p == NULL)
00194 return NULL;
00195
00196 s = xode_spool_newfrompool(p);
00197
00198 va_start(ap, p);
00199
00200 /* loop till we hit our end flag, the first arg */
00201 while (1) {
00202 arg = va_arg(ap, char *);
00203 if ((xode_pool) arg == p)
00204 break;
00205 else
00206 xode_spool_add(s, arg);
00207 }
00208
00209 va_end(ap);
00210
00211 return spool_print(s);
00212 }
|
|
|
|
|
||||||||||||
|
|
|
||||||||||||
|
|
|
||||||||||||||||
|
Definition at line 499 of file JContact.c. References exactmatch, NULL, xode, and xode_get_attrib(). Referenced by list_contacts(), and list_contacts_bygroup(). 00503 {
00504 char *nick;
00505
00506 if (!strcasecmp(xode_get_attrib(contact, "jid"), matchstr)) {
00507 return 1;
00508 }
00509
00510 if ((nick = xode_get_attrib(contact, "nick")) != NULL &&
00511 !strcasecmp(nick, matchstr)) {
00512 return 1;
00513 }
00514
00515 if (!exactmatch && !strncasecmp(xode_get_attrib(contact, "jid"),
00516 matchstr, strlen(matchstr))) {
00517 return 1;
00518 }
00519
00520 return 0;
00521 }
|
|
|
Definition at line 150 of file JStr.c. References dExecution, and dprintf(). Referenced by jab_on_packet_handler(), and jwg_on_event_handler(). 00152 {
00153 int pos = strlen(str);
00154
00155 dprintf(dExecution, "Trim start position at %d.\n", pos);
00156 while (pos >= 0 && (isspace(str[pos]) || iscntrl(str[pos]))) {
00157 dprintf(dExecution, "Trimming position %d.\n", pos);
00158 str[pos] = '\0';
00159 pos--;
00160 }
00161 }
|
|
||||||||||||
|
|
|
||||||||||||||||
|
Definition at line 124 of file JContact.c. References contact_list, dExecution, dprintf(), insert_into_contact_list(), insert_resource_into_contact(), jid, xode, xode_get_attrib(), xode_get_firstchild(), xode_get_nextsibling(), xode_get_tag(), xode_hide_attrib(), and xode_put_attrib(). Referenced by contact_status_change(), and process_iq_result(). 00125 {
00126 int contactfound = 0;
00127 int resourcefound = 0;
00128 int i;
00129 char *pos;
00130 xode x, y;
00131 int ret = 0;
00132
00133 dprintf(dExecution, "Updating %s/%s status to %s.\n",
00134 jid,
00135 resource ? resource : "NULL",
00136 status ? status : "NULL");
00137
00138 for (i = 0; i < num_contacts; i++) {
00139 if (!strcasecmp(xode_get_attrib(contact_list[i], "jid"),
00140 jid)) {
00141 contactfound = 1;
00142 if (!resource) {
00143 break;
00144 }
00145 x = xode_get_tag(contact_list[i], "resources");
00146 y = xode_get_firstchild(x);
00147 while (y) {
00148 if (!strcmp(xode_get_attrib(y, "name"),
00149 resource)) {
00150 char *curstatus;
00151 resourcefound = 1;
00152
00153 curstatus = xode_get_attrib(y,
00154 "status");
00155 if (curstatus && !status) {
00156 xode_hide_attrib(y, "status");
00157 ret = 1;
00158 }
00159 else if (status && (!curstatus ||
00160 strcmp(curstatus, status))) {
00161 xode_put_attrib(y,
00162 "status",
00163 status);
00164 ret = 1;
00165 }
00166 break;
00167 }
00168 y = xode_get_nextsibling(y);
00169 }
00170
00171 if (!resourcefound) {
00172 insert_resource_into_contact(i,
00173 resource, status);
00174 ret = 1;
00175 }
00176
00177 break;
00178 }
00179 }
00180
00181 if (!contactfound) {
00182 insert_into_contact_list(jid, status, resource);
00183 ret = 1;
00184 }
00185
00186 return ret;
00187 }
|
|
||||||||||||
|
Definition at line 447 of file JContact.c. References contact_list, target, xode_get_attrib(), and xode_put_attrib(). Referenced by jwg_on_event_handler(), and process_iq_result(). 00448 {
00449 int i;
00450
00451 for (i = 0; i < num_contacts; i++) {
00452 if (!strcasecmp(xode_get_attrib(contact_list[i], "jid"),
00453 target)) {
00454 xode_put_attrib(contact_list[i], "group", group);
00455 return;
00456 }
00457 }
00458 }
|
|
||||||||||||
|
Definition at line 433 of file JContact.c. References contact_list, target, xode_get_attrib(), and xode_put_attrib(). Referenced by jwg_on_event_handler(), and process_iq_result(). 00434 {
00435 int i;
00436
00437 for (i = 0; i < num_contacts; i++) {
00438 if (!strcasecmp(xode_get_attrib(contact_list[i], "jid"),
00439 target)) {
00440 xode_put_attrib(contact_list[i], "nick", nickname);
00441 return;
00442 }
00443 }
00444 }
|
|
||||||||||||
|
Definition at line 192 of file JExpat.c. References NULL, spools(), xode, xode_get_pool(), and xode_to_str(). 00193 {
00194 char *doc, *ftmp;
00195 int fd, i;
00196
00197 if (file == NULL || node == NULL)
00198 return -1;
00199
00200 ftmp = spools(xode_get_pool(node), file, ".t.m.p", xode_get_pool(node));
00201 fd = open(ftmp, O_CREAT | O_WRONLY | O_TRUNC, 0600);
00202 if (fd < 0)
00203 return -1;
00204
00205 doc = xode_to_str(node);
00206 i = write(fd, doc, strlen(doc));
00207 if (i < 0)
00208 return -1;
00209
00210 close(fd);
00211
00212 if (rename(ftmp, file) < 0) {
00213 unlink(ftmp);
00214 return -1;
00215 }
00216 return 1;
00217 }
|
|
|
Definition at line 121 of file JExpat.c. References expat_charData(), expat_endElement(), expat_startElement(), NULL, XML_Parse(), XML_Parser, XML_ParserCreate(), XML_ParserFree(), XML_SetCharacterDataHandler(), XML_SetElementHandler(), XML_SetUserData(), xode, and xode_free(). 00122 {
00123 XML_Parser p;
00124 xode *x, node; /* pointer to an xode */
00125 char buf[BUFSIZ];
00126 int done, fd, len;
00127
00128 if (NULL == file)
00129 return NULL;
00130
00131 fd = open(file, O_RDONLY);
00132 if (fd < 0)
00133 return NULL;
00134
00135 x = malloc(sizeof(void *));
00136
00137 *x = NULL; /* pointer to NULL */
00138 p = XML_ParserCreate(NULL);
00139 XML_SetUserData(p, x);
00140 XML_SetElementHandler(p, expat_startElement, expat_endElement);
00141 XML_SetCharacterDataHandler(p, expat_charData);
00142 do {
00143 len = read(fd, buf, BUFSIZ);
00144 done = len < BUFSIZ;
00145 if (!XML_Parse(p, buf, len, done)) {
00146 /*
00147 * jdebug(ZONE,"xode_file_parseerror: %s",(char
00148 * *)XML_ErrorString(XML_GetErrorCode(p)));
00149 */
00150 xode_free(*x);
00151 *x = NULL;
00152 done = 1;
00153 }
00154 } while (!done);
00155
00156 node = *x;
00157 XML_ParserFree(p);
00158 free(x);
00159 close(fd);
00160 return node; /* return the xode x points to */
00161 }
|
|
||||||||||||
|
Definition at line 220 of file JExpat.c. References atts, xode, and xode_put_attrib(). Referenced by expat_startElement(). 00221 {
00222 int i = 0;
00223 if (atts == NULL)
00224 return;
00225 while (atts[i] != '\0') {
00226 xode_put_attrib(owner, atts[i], atts[i + 1]);
00227 i += 2;
00228 }
00229 }
|
|
||||||||||||
|
Definition at line 91 of file JExpat.c. References expat_charData(), expat_endElement(), expat_startElement(), NULL, XML_Parse(), XML_Parser, XML_ParserCreate(), XML_ParserFree(), XML_SetCharacterDataHandler(), XML_SetElementHandler(), XML_SetUserData(), xode, and xode_free(). 00092 {
00093 XML_Parser p;
00094 xode *x, node; /* pointer to an xode */
00095
00096 if (NULL == str)
00097 return NULL;
00098
00099 x = malloc(sizeof(void *));
00100
00101 *x = NULL; /* pointer to NULL */
00102 p = XML_ParserCreate(NULL);
00103 XML_SetUserData(p, x);
00104 XML_SetElementHandler(p, expat_startElement, expat_endElement);
00105 XML_SetCharacterDataHandler(p, expat_charData);
00106 if (!XML_Parse(p, str, len, 1)) {
00107 /*
00108 * jdebug(ZONE,"xode_str_error: %s",(char
00109 * *)XML_ErrorString(XML_GetErrorCode(p)));
00110 */
00111 xode_free(*x);
00112 *x = NULL;
00113 }
00114 node = *x;
00115 free(x);
00116 XML_ParserFree(p);
00117 return node; /* return the xode x points to */
00118 }
|
| Last updated at Tue Dec 18 21:07:42 PST 2007. | This site and project hosted by... |