Jabber WindowGram Client (JWGC)

Introduction Screenshots Installation Downloads
Documentation Browse Source Resources Project Site

Stable Version
-none-

Latest Version
beta5



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

main.h File Reference

#include <sysdep.h>
#include <libjabber.h>
#include <libjwgc.h>

Go to the source code of this file.

Defines

#define USRDESC   ".jwgc.desc"
#define DEFDESC   "jwgc.desc"
#define DEFSERVER   "jabber.org"
#define DEFPORT   "5222"
#define DEFSSLPORT   "5223"
#define DEFRESOURCE   "jwgc"
#define DEFPRESENCE   "available"
#define DEFPRIORITY   "0"
#define DEFUSESSL   "false"
#define DEFUSEGPG   "false"
#define MACHINE_TYPE   "unknown"

Functions

void jab_on_packet_handler (jabconn conn, jabpacket packet)
void jab_on_state_handler (jabconn conn, int state)
void jwg_on_event_handler (jwgconn conn, jwgpacket packet)
void jwg_set_defaults_handler ()
void usage ()
int read_in_description_file ()
char * decode_notice (struct jabpacket_struct *notice)
_Nodeparse_file (FILE *input_file)
_Nodeparse_buffer (char *input_buffer)
void show_status ()
void var_clear_all_variables ()

Variables

_Nodeprogram
char * progname
int jab_reauth
jabconn jab_c
jwgconn jwg_c
time_t jab_connect_time


Define Documentation

#define DEFDESC   "jwgc.desc"
 

Definition at line 24 of file main.h.

Referenced by read_in_description_file().

#define DEFPORT   "5222"
 

Definition at line 32 of file main.h.

Referenced by jwg_set_defaults_handler().

#define DEFPRESENCE   "available"
 

Definition at line 44 of file main.h.

Referenced by jwg_set_defaults_handler().

#define DEFPRIORITY   "0"
 

Definition at line 48 of file main.h.

Referenced by jwg_set_defaults_handler().

#define DEFRESOURCE   "jwgc"
 

Definition at line 40 of file main.h.

Referenced by jwg_set_defaults_handler().

#define DEFSERVER   "jabber.org"
 

Definition at line 28 of file main.h.

Referenced by jwg_set_defaults_handler().

#define DEFSSLPORT   "5223"
 

Definition at line 36 of file main.h.

Referenced by main().

#define DEFUSEGPG   "false"
 

Definition at line 56 of file main.h.

Referenced by jwg_set_defaults_handler().

#define DEFUSESSL   "false"
 

Definition at line 52 of file main.h.

Referenced by jwg_set_defaults_handler().

#define MACHINE_TYPE   "unknown"
 

Definition at line 60 of file main.h.

Referenced by show_status().

#define USRDESC   ".jwgc.desc"
 

Definition at line 20 of file main.h.

Referenced by read_in_description_file().


Function Documentation

char* decode_notice struct jabpacket_struct notice  ) 
 

Definition at line 155 of file notice.c.

00157 {
00158         char *temp, *c, *d, *from, *ns, *jid;
00159         xode x, y;
00160         char timestr[26];
00161         time_t curtime;
00162 
00163         var_set_variable_then_free_value("type",
00164                 jab_type_to_ascii(notice->type));
00165         var_set_variable_then_free_value("subtype",
00166                 jab_subtype_to_ascii(notice->subtype));
00167 
00168         dprintf(dXML, "Decoding Notice [%d,%d]:\n%s\n",
00169                 notice->type,
00170                 notice->subtype,
00171                 xode_to_prettystr(notice->x));
00172 
00173         temp = xode_get_attrib(notice->x, "type");
00174         if (temp) {
00175                 var_set_variable("msgtype", temp);
00176         }
00177         else {
00178                 var_set_variable("msgtype", "");
00179         }
00180 
00181         var_set_variable("from", "");
00182         var_set_variable("sender", "");
00183         var_set_variable("server", "");
00184         var_set_variable("resource", "");
00185         var_set_variable("nickname", "");
00186         jid = notice->from->full;
00187         if (jid) {
00188                 from = strdup(jid);
00189         }
00190         else {
00191                 from = strdup(xode_get_attrib(notice->x, "from"));
00192         }
00193         if (from) {
00194                 var_set_variable("from", from);
00195                 temp = (char *) find_nickname_from_jid(from);
00196                 if (temp) {
00197                         var_set_variable_then_free_value("nickname", temp);
00198                 }
00199 
00200                 c = from;
00201                 d = strchr(c, '@');
00202                 if (d) {
00203                         *d = '\0';
00204                         temp = strdup(c);
00205                         var_set_variable_then_free_value("sender", temp);
00206                         d++;
00207                         c = d;
00208                         d = strchr(c, '/');
00209                         if (d) {
00210                                 *d = '\0';
00211                                 temp = strdup(c);
00212                                 var_set_variable_then_free_value("server",
00213                                                 temp);
00214                                 d++;
00215                                 c = d;
00216                                 temp = strdup(c);
00217                                 var_set_variable_then_free_value("resource",
00218                                                 temp);
00219                         }
00220                         else {
00221                                 var_set_variable("server", c);
00222                                 var_set_variable("resource", "");
00223                         }
00224                 }
00225                 else {
00226                         var_set_variable("sender", from);
00227                 }
00228         }
00229         else {
00230                 var_set_variable("from", "[unknown]");
00231         }
00232         free(from);
00233 
00234         x = xode_get_tag(notice->x, "subject");
00235         if (x) {
00236                 temp = xode_get_data(x);
00237                 var_set_variable("subject", temp);
00238         }
00239         else {
00240                 var_set_variable("subject", "");
00241         }
00242 
00243         var_set_variable("event", "");
00244         x = xode_get_tag(notice->x, "x");
00245         if (x) {
00246                 ns = xode_get_attrib(x, "xmlns");
00247                 if (ns && !strcmp(ns, NS_EVENT)) {
00248                         y = xode_get_tag(x, "composing");
00249                         if (y) {
00250                                 var_set_variable("event", "composing");
00251                         }
00252                 }
00253         }
00254 
00255         x = xode_get_tag(notice->x, "show");
00256         if (x) {
00257                 char *convtemp;
00258                 temp = xode_get_data(x);
00259                 if (!unicode_to_str(temp, &convtemp)) {
00260                         convtemp = strdup("");
00261                 }
00262                 var_set_variable_then_free_value("show", convtemp);
00263         }
00264         else {
00265                 var_set_variable("show", "");
00266         }
00267 
00268         x = xode_get_tag(notice->x, "status");
00269         if (x) {
00270                 char *convtemp;
00271                 temp = xode_get_data(x);
00272                 if (!unicode_to_str(temp, &convtemp)) {
00273                         convtemp = strdup("");
00274                 }
00275                 if (temp) {
00276                         var_set_variable_then_free_value("status", convtemp);
00277                 }
00278                 else {
00279                         var_set_variable("status", "");
00280                 }
00281         }
00282         else {
00283                 var_set_variable("status", "");
00284         }
00285 
00286         x = xode_get_tag(notice->x, "error");
00287         if (x) {
00288                 temp = xode_get_data(x);
00289                 var_set_variable("error", temp);
00290         }
00291         else {
00292                 var_set_variable("error", "");
00293         }
00294 
00295         curtime = time(NULL);
00296         strftime(timestr, 25, "%T", localtime(&curtime));
00297         var_set_variable("time", timestr);
00298 
00299         strftime(timestr, 25, "%r", localtime(&curtime));
00300         var_set_variable("time12", timestr);
00301 
00302         strftime(timestr, 25, "%x", localtime(&curtime));
00303         var_set_variable("date", timestr);
00304 
00305         strftime(timestr, 25, "%a %b %e %Y", localtime(&curtime));
00306         var_set_variable("longdate", timestr);
00307 
00308         return (0);
00309 }

void jab_on_packet_handler jabconn  conn,
jabpacket  packet
 

Definition at line 13 of file jabber_handler.c.

References decode_notice(), dExecution, dprintf(), exec_process_packet(), jabconn, jabpacket, JABPACKET__ERROR, JABPACKET__GET, JABPACKET__RESULT, JABPACKET__SET, JABPACKET_IQ, JABPACKET_MESSAGE, JABPACKET_PRESENCE, jabpacket_reset(), xode_struct::name, ns, NS_ENCRYPTED, NULL, process_iq_error(), process_iq_get(), process_iq_result(), process_iq_set(), process_presence(), program, jabpacket_struct::subtype, trim_message(), jabpacket_struct::type, unicode_to_str(), jabpacket_struct::x, xode, xode_get_attrib(), xode_get_data(), xode_get_tag(), and xode_to_str().

Referenced by jabber_init().

00016 {
00017         dprintf(dExecution, "Jabber packet handler called...\n");
00018         if (conn->dumpfd != -1) {
00019                 char *id = xode_get_attrib(packet->x, "id");
00020                 if (conn->dumpid == NULL ||
00021                         (id != NULL && !strcmp(conn->dumpid, id))) {
00022                         char *tmpstr;
00023 
00024                         dprintf(dExecution, "Dumping to client...\n");
00025                         tmpstr = xode_to_str(packet->x);
00026                         if (tmpstr) {
00027                                 write(conn->dumpfd, tmpstr, strlen(tmpstr) + 1);
00028                         }
00029                         return;
00030                 }
00031         }
00032 
00033         jabpacket_reset(packet);
00034         dprintf(dExecution, "Packet: %s\n",
00035                         packet->x->name ? packet->x->name : "n/a");
00036         switch (packet->type) {
00037                 case JABPACKET_MESSAGE: {
00038                         xode x;
00039                         char *cbody, *body, *ns, *convbody;
00040                         int body_sz;
00041 
00042                         body = NULL;
00043 
00044                         dprintf(dExecution, "Received MESSAGE\n");
00045 
00046 #ifdef USE_GPGME
00047                         x = xode_get_tag(packet->x, "x");
00048                         if (x) {
00049                                 ns = xode_get_attrib(x, "xmlns");
00050                                 if (ns && !strcmp(ns, NS_ENCRYPTED)) {
00051                                         cbody = xode_get_data(x);
00052                                         if (cbody) {
00053                                                 body = JDecrypt(cbody);
00054                                                 if (body) {
00055                                                         trim_message(body);
00056                                                 }
00057                                         }
00058                                 }
00059                         }
00060 #endif /* USE_GPGME */
00061                         if (!body) {
00062                                 x = xode_get_tag(packet->x, "body");
00063                                 if (x) {
00064                                         cbody = xode_get_data(x);
00065                                         if (cbody) {
00066                                                 body = strdup(cbody);
00067                                                 trim_message(body);
00068                                         }
00069                                 }
00070                         }
00071 
00072                         if (!unicode_to_str(body, &convbody)) {
00073                                 convbody = strdup("");
00074                         }
00075                         body_sz = strlen(convbody);
00076 
00077                         decode_notice(packet);
00078                         dprintf(dExecution, "Rendering message...\n");
00079                         exec_process_packet(program, packet, convbody, body_sz);
00080                         free(body);
00081                 } break;
00082 
00083                 case JABPACKET_PRESENCE: {
00084                         dprintf(dExecution, "Received PRESENCE\n");
00085                         dprintf(dExecution, "Contact status change\n");
00086                         process_presence(conn, packet);
00087                 } break;
00088 
00089                 case JABPACKET_IQ: {
00090                         dprintf(dExecution, "IQ received: %d\n",
00091                                         packet->subtype);
00092                         switch (packet->subtype) {
00093                                 case JABPACKET__GET: {
00094                                         dprintf(dExecution,
00095                                                 "Process IQ Get...\n");
00096                                         process_iq_get(conn, packet);
00097                                 } break;
00098 
00099                                 case JABPACKET__SET: {
00100                                         dprintf(dExecution,
00101                                                 "Process IQ Set...\n");
00102                                         process_iq_set(conn, packet);
00103                                 } break;
00104 
00105                                 case JABPACKET__RESULT: {
00106                                         dprintf(dExecution,
00107                                                 "Process IQ Result...\n");
00108                                         process_iq_result(conn, packet);
00109                                 } break;
00110 
00111                                 case JABPACKET__ERROR: {
00112                                         dprintf(dExecution,
00113                                                 "Process IQ Error...\n");
00114                                         process_iq_error(conn, packet);
00115                                 } break;
00116 
00117                                 default: {
00118                                         dprintf(dExecution,
00119                                                 "Unknown subtype.\n");
00120                                 } break;
00121                         }
00122                 } break;
00123 
00124                 default: {
00125                         dprintf(dExecution,
00126                         "unrecognized packet: %i recieved\n", packet->type);
00127                 } break;
00128         }
00129 }

void jab_on_state_handler jabconn  conn,
int  state
 

Definition at line 132 of file jabber_handler.c.

References dExecution, dprintf(), jab_c, jab_getfd(), jab_reauth, jab_send(), jabconn, JABCONN_STATE_AUTH, JABCONN_STATE_CONNECTED, JABCONN_STATE_OFF, JABCONN_STATE_ON, JABPACKET__AVAILABLE, JABPACKET__GET, jabutil_iqnew(), jabutil_presnew(), jVarPresence, jVarPriority, jVars_get(), mux_delete_input_source(), NS_AGENT, NS_AGENTS, NS_ROSTER, NULL, xode, xode_free(), xode_insert_cdata(), and xode_insert_tag().

Referenced by jabber_init().

00135 {
00136         static int previous_state = JABCONN_STATE_OFF;
00137 
00138         dprintf(dExecution,
00139         "Entering: new state: %i previous_state: %i\n", state, previous_state);
00140         switch (state) {
00141                 case JABCONN_STATE_OFF: {
00142                         if (previous_state != JABCONN_STATE_OFF) {
00143                                 dprintf(dExecution,
00144                                 "The Jabber server has disconnected you: %i\n",
00145                                 previous_state);
00146                                 mux_delete_input_source(jab_getfd(jab_c));
00147                                 jab_reauth = 1;
00148                         }
00149                 } break;
00150 
00151                 case JABCONN_STATE_CONNECTED: {
00152                         dprintf(dExecution, "JABCONN_STATE_CONNECTED\n");
00153                 } break;
00154 
00155                 case JABCONN_STATE_AUTH: {
00156                         dprintf(dExecution, "JABCONN_STATE_AUTH\n");
00157                 } break;
00158 
00159                 case JABCONN_STATE_ON: {
00160                         xode x, out;
00161 
00162                         dprintf(dExecution, "JABCONN_STATE_ON\n");
00163 
00164                         dprintf(dExecution, "requesting agent list\n");
00165                         x = jabutil_iqnew(JABPACKET__GET, NS_AGENTS);
00166                         jab_send(conn, x);
00167                         xode_free(x);
00168 
00169                         dprintf(dExecution, "requesting roster\n");
00170                         x = jabutil_iqnew(JABPACKET__GET, NS_ROSTER);
00171                         jab_send(conn, x);
00172                         xode_free(x);
00173 
00174                         dprintf(dExecution, "requesting agent info\n");
00175                         x = jabutil_iqnew(JABPACKET__GET, NS_AGENT);
00176                         jab_send(conn, x);
00177                         xode_free(x);
00178 
00179                         if (strcmp((char *)jVars_get(jVarPresence),
00180                                                         "available")) {
00181                                 xode y;
00182 
00183                                 out = jabutil_presnew(JABPACKET__AVAILABLE,
00184                                         NULL,
00185                                         (char *)jVars_get(jVarPresence),
00186                                         *(int *)jVars_get(jVarPriority));
00187                                 x = xode_insert_tag(out, "show");
00188                                 y = xode_insert_cdata(x,
00189                                 (char *)jVars_get(jVarPresence),
00190                                 strlen((char *)jVars_get(jVarPresence)));
00191                         }
00192                         else {
00193                                 out = jabutil_presnew(JABPACKET__AVAILABLE,
00194                                         NULL,
00195                                         NULL,
00196                                         *(int *)jVars_get(jVarPriority));
00197                         }
00198                         jab_send(conn, out);
00199                         xode_free(out);
00200                 } break;
00201 
00202                 default: {
00203                         dprintf(dExecution, "UNKNOWN state: %i\n", state);
00204                 } break;
00205         }
00206         previous_state = state;
00207 }

void jwg_on_event_handler jwgconn  conn,
jwgpacket  packet
 

Definition at line 7 of file jwgc_handler.c.

References dExecution, dparseflags(), dprintf(), jabconn_struct::dumpfd, jabconn_struct::dumpid, find_match(), jab_c, jab_recv(), jab_send(), JABPACKET__GET, JABPACKET__SET, JABPACKET__SUBSCRIBE, JABPACKET__UNAVAILABLE, JABPACKET__UNSUBSCRIBE, jabutil_iqnew(), jabutil_msgnew(), jabutil_pingnew(), jabutil_presnew(), jid, jVarJID, jVars_get(), jVars_get_error(), jVars_set(), jVars_show(), jVars_stoi(), jwg_c, jwg_cleanup(), jwg_serverror(), jwg_servsend(), jwg_servsuccess(), jwgconn, jwgpacket, JWGPACKET_CHECK, JWGPACKET_DEBUG, JWGPACKET_GROUP, JWGPACKET_JOIN, JWGPACKET_LEAVE, JWGPACKET_LOCATE, JWGPACKET_MESSAGE, JWGPACKET_NICKNAME, JWGPACKET_PING, JWGPACKET_REGISTER, JWGPACKET_REREAD, jwgpacket_reset(), JWGPACKET_SEARCH, JWGPACKET_SETVAR, JWGPACKET_SHOWVAR, JWGPACKET_SHUTDOWN, JWGPACKET_STATUS, JWGPACKET_SUBSCRIBE, JWGPACKET_UNSUBSCRIBE, list_contacts(), list_contacts_bygroup(), mux_end_loop_p, NS_REGISTER, NS_ROSTER, NS_SEARCH, NULL, read_in_description_file(), remove_from_contact_list(), jwgconn_struct::sckfd, show_status(), showall, target, trim_message(), jwgpacket_struct::type, update_group(), update_nickname(), jwgpacket_struct::x, xode, xode_free(), xode_get_attrib(), xode_get_data(), xode_get_firstchild(), xode_get_nextsibling(), xode_get_tag(), xode_get_tagdata(), xode_insert_cdata(), xode_insert_node(), xode_insert_tag(), xode_new(), and xode_put_attrib().

Referenced by jwgc_init().

00008 {
00009         dprintf(dExecution, "JWGC event handler called...\n");
00010 
00011         jwgpacket_reset(packet);
00012         dprintf(dExecution, "Received event: %d.\n", packet->type);
00013         switch (packet->type) {
00014                 case JWGPACKET_PING: {
00015                         char *match, *target, *message, *dontmatch, *type;
00016                         char retstr[80];
00017                         xode out;
00018 
00019                         target = xode_get_attrib(packet->x, "to");
00020                         dontmatch = xode_get_attrib(packet->x, "dontmatch");
00021                         type = xode_get_attrib(packet->x, "type");
00022                         if (!type) {
00023                                 type = strdup("chat");
00024                         }
00025 
00026                         dprintf(dExecution, "Received ping\n");
00027 
00028                         if (!target) {
00029                                 dprintf(dExecution, "No target specified.\n");
00030                                 jwg_serverror(conn, "No target specified.");
00031                                 break;
00032                         }
00033 
00034                         dprintf(dExecution, "Target %s\n", target);
00035                         if (dontmatch && !strcmp(dontmatch, "yes")) {
00036                                 match = strdup(target);
00037                         }
00038                         else if (strncmp(target,
00039                                         (char *)jVars_get(jVarJID),
00040                                         strlen(target))) {
00041                                 match = find_match(target);
00042                                 if (!match) {
00043                                         dprintf(dExecution, "No match\n");
00044                                         jwg_serverror(conn, "Unable to find a matching user.");
00045 
00046                                         break;
00047                                 }
00048                         }
00049                         else {
00050                                 match = strdup(target);
00051                         }
00052 
00053                         dprintf(dExecution, "To: %s\n", match);
00054                         out = jabutil_pingnew(type, match);
00055                         jab_send(jab_c, out);
00056 
00057                         sprintf(retstr, "Successfully pinged %.67s.", match);
00058                         jwg_servsuccess(conn, retstr);
00059                 } break;
00060 
00061                 case JWGPACKET_MESSAGE: {
00062                         char *match, *target, *message, *dontmatch, *encrypt,
00063                                 *encmessage, *type;
00064                         char retstr[80];
00065                         xode out;
00066 
00067                         encrypt = NULL;
00068                         encmessage = NULL;
00069                         target = xode_get_attrib(packet->x, "to");
00070                         dontmatch = xode_get_attrib(packet->x, "dontmatch");
00071                         encrypt = xode_get_attrib(packet->x, "encrypt");
00072                         type = xode_get_attrib(packet->x, "type");
00073                         if (!type) {
00074                                 type = strdup("chat");
00075                         }
00076 
00077                         dprintf(dExecution, "Received message\n");
00078 
00079                         if (!target) {
00080                                 dprintf(dExecution, "No target specified.\n");
00081                                 jwg_serverror(conn, "No target specified.");
00082                                 break;
00083                         }
00084 
00085                         dprintf(dExecution, "Target %s\n", target);
00086                         if (dontmatch && !strcmp(dontmatch, "yes")) {
00087                                 match = strdup(target);
00088                         }
00089                         else if (strncmp(target,
00090                                         (char *)jVars_get(jVarJID),
00091                                         strlen(target))) {
00092                                 match = find_match(target);
00093                                 if (!match) {
00094                                         dprintf(dExecution, "No match\n");
00095                                         jwg_serverror(conn, "Unable to find a matching user.");
00096 
00097                                         break;
00098                                 }
00099                         }
00100                         else {
00101                                 match = strdup(target);
00102                         }
00103 
00104                         message = xode_get_data(packet->x);
00105                         if (!message) {
00106                                 message = "";
00107                         }
00108                         else {
00109                                 trim_message(message);
00110                         }
00111 
00112 #ifdef USE_GPGME
00113                         if (encrypt) {
00114                                 char *keyid = JGetKeyID(match);
00115 
00116                                 if (!keyid) {
00117                                         dprintf(dExecution, "Unable to find keyid.\n");
00118                                         jwg_serverror(conn, "Unable to find a matching gpg key.");
00119                                         break;
00120                                 }
00121 
00122                                 encmessage = JEncrypt(message, keyid);
00123                                 if (!encmessage) {
00124                                         dprintf(dExecution, "Unable to encrypt message.\n");
00125                                         jwg_serverror(conn, "Unable to encrypt message.");
00126                                         break;
00127                                 }
00128 
00129                                 encmessage = JTrimPGPMessage(encmessage);
00130                                 if (!encmessage) {
00131                                         dprintf(dExecution, "Unable to trim encrypted message.\n");
00132                                         jwg_serverror(conn, "Unable to trim encrypted message.");
00133                                         break;
00134                                 }
00135 
00136                                 message = "[This message is encrypted.]";
00137                         }
00138 #endif /* USE_GPGME */
00139 
00140                         dprintf(dExecution, "To: %s\nMsg: %s%s\n", match, message, encmessage ? " [encrypted]" : "");
00141                         out = jabutil_msgnew(type, match, NULL, message, encmessage);
00142                         jab_send(jab_c, out);
00143 
00144                         sprintf(retstr, "Successfully sent to %.67s.", match);
00145                         jwg_servsuccess(conn, retstr);
00146                 } break;
00147 
00148                 case JWGPACKET_LOCATE: {
00149                         char *organization, *match, *showall, *target;
00150                         int skipnotavail, strictmatch;
00151 
00152                         dprintf(dExecution, "Received locate\n");
00153 
00154                         target = xode_get_attrib(packet->x, "target");
00155                         if (!target) {
00156                                 target = NULL;
00157                         }
00158 
00159                         strictmatch = 0;
00160                         match = xode_get_attrib(packet->x, "match");
00161                         if (match) {
00162                                 if (!strcmp(match, "strict")) {
00163                                         strictmatch = 1;
00164                                 }
00165                         }
00166 
00167                         skipnotavail = 1;
00168                         showall = xode_get_attrib(packet->x, "showall");
00169                         if (showall && !strcmp(showall, "yes")) {
00170                                 skipnotavail = 0;
00171                         }
00172 
00173                         organization = xode_get_attrib(packet->x, "organization");
00174                         if (organization) {
00175                                 if (!strcmp(organization, "group")) {
00176                                         list_contacts_bygroup(jwg_c, target, strictmatch, skipnotavail);
00177                                 }
00178                                 else {
00179                                         list_contacts(jwg_c, target, strictmatch, skipnotavail);
00180                                 }
00181                         }
00182                         else {
00183                                 list_contacts(jwg_c, target, strictmatch, skipnotavail);
00184                         }
00185                 } break;
00186 
00187                 case JWGPACKET_STATUS: {
00188                         show_status();
00189                 } break;
00190 
00191                 case JWGPACKET_SHUTDOWN: {
00192                         dprintf(dExecution, "Received shutdown\n");
00193                         jwg_servsuccess(conn, "Shutdown initiated.");
00194                         mux_end_loop_p = 1;
00195                 } break;
00196 
00197                 case JWGPACKET_CHECK: {
00198                         dprintf(dExecution, "Received check\n");
00199                         jwg_servsuccess(conn, "check");
00200                 } break;
00201 
00202                 case JWGPACKET_REREAD: {
00203                         dprintf(dExecution, "Received reread\n");
00204                         if (read_in_description_file()) {
00205                                 jwg_servsuccess(conn,
00206                                         "Description file loaded.");
00207                         }
00208                         else {
00209                                 jwg_serverror(conn,
00210                                 "Description file had an error.  Load failed.");
00211                         }
00212                 } break;
00213 
00214                 case JWGPACKET_SHOWVAR: {
00215                         xode out, x;
00216                         char *var, *setting;
00217 
00218                         dprintf(dExecution, "Received showvar\n");
00219 
00220                         var = xode_get_attrib(packet->x, "var");
00221                         if (!var) {
00222                                 jwg_serverror(conn, "Variable not specified.");
00223                                 break;
00224                         }
00225 
00226                         setting = jVars_show(jVars_stoi(var));
00227                         if (!setting) {
00228                                 jwg_serverror(conn, jVars_get_error());
00229                                 break;
00230                         }
00231 
00232                         out = xode_new("results");
00233                         x = xode_insert_cdata(out, setting, strlen(setting));
00234                         jwg_servsend(conn, out);
00235                         xode_free(out);
00236                 } break;
00237 
00238                 case JWGPACKET_SUBSCRIBE: {
00239                         xode out, x, y;
00240                         char *jid;
00241 
00242                         dprintf(dExecution, "Received subscribe\n");
00243 
00244                         jid = xode_get_attrib(packet->x, "jid");
00245                         if (!jid) {
00246                                 jwg_serverror(conn, "JID not specified.");
00247                                 break;
00248                         }
00249                         dprintf(dExecution, "Subscribe: %s\n", jid);
00250 
00251                         out = jabutil_presnew(JABPACKET__SUBSCRIBE, jid, "Jwgc Subscription Request", -1);
00252                         jab_send(jab_c, out);
00253                         xode_free(out);
00254 
00255                         out = jabutil_iqnew(JABPACKET__SET, NS_ROSTER);
00256                         x = xode_get_tag(out, "query");
00257                         y = xode_insert_tag(x, "item");
00258                         xode_put_attrib(y, "jid", jid);
00259                         jab_send(jab_c, out);
00260                         xode_free(out);
00261 
00262                         out = xode_new("presence");
00263                         xode_put_attrib(out, "to", jid);
00264                         jab_send(jab_c, out);
00265                         xode_free(out);
00266 
00267                         jwg_servsuccess(conn, "Subscription successful.");
00268                 } break;
00269 
00270                 case JWGPACKET_UNSUBSCRIBE: {
00271                         xode out, x, y;
00272                         char *jid;
00273 
00274                         dprintf(dExecution, "Received unsubscribe\n");
00275 
00276                         jid = xode_get_attrib(packet->x, "jid");
00277                         if (!jid) {
00278                                 jwg_serverror(conn, "JID not specified.");
00279                                 break;
00280                         }
00281                         dprintf(dExecution, "Unsubscribe: %s\n", jid);
00282 
00283                         out = jabutil_presnew(JABPACKET__UNSUBSCRIBE, jid, "Jwgc Unsubscription Request", -1);
00284                         jab_send(jab_c, out);
00285                         xode_free(out);
00286 
00287                         out = jabutil_iqnew(JABPACKET__SET, NS_ROSTER);
00288                         x = xode_get_tag(out, "query");
00289                         y = xode_insert_tag(x, "item");
00290                         xode_put_attrib(y, "jid", jid);
00291                         xode_put_attrib(y, "subscription", "remove");
00292                         jab_send(jab_c, out);
00293                         xode_free(out);
00294 
00295                         jwg_servsuccess(conn, "Unsubscription successful.");
00296                 } break;
00297 
00298                 case JWGPACKET_NICKNAME: {
00299                         xode out, x, y;
00300                         char *jid, *nick;
00301 
00302                         dprintf(dExecution, "Received nickname\n");
00303 
00304                         jid = xode_get_attrib(packet->x, "jid");
00305                         nick = xode_get_attrib(packet->x, "nick");
00306                         if (!jid) {
00307                                 jwg_serverror(conn, "JID not specified.");
00308                                 break;
00309                         }
00310                         if (!nick) {
00311                                 jwg_serverror(conn, "Nickname not specified.");
00312                                 break;
00313                         }
00314                         dprintf(dExecution, "Nickname: %s -> %s\n", jid, nick);
00315 
00316                         out = jabutil_iqnew(JABPACKET__SET, NS_ROSTER);
00317                         x = xode_get_tag(out, "query");
00318                         y = xode_insert_tag(x, "item");
00319                         xode_put_attrib(y, "jid", jid);
00320                         xode_put_attrib(y, "name", nick);
00321                         jab_send(jab_c, out);
00322                         xode_free(out);
00323 
00324                         update_nickname(jid, nick);
00325 
00326                         jwg_servsuccess(conn, "Nickname setting successful.");
00327                 } break;
00328 
00329                 case JWGPACKET_GROUP: {
00330                         xode out, x, y, z, zz;
00331                         char *jid, *group;
00332 
00333                         dprintf(dExecution, "Received group\n");
00334 
00335                         jid = xode_get_attrib(packet->x, "jid");
00336                         group = xode_get_attrib(packet->x, "group");
00337                         if (!jid) {
00338                                 jwg_serverror(conn, "JID not specified.");
00339                                 break;
00340                         }
00341                         if (!group) {
00342                                 jwg_serverror(conn, "Group not specified.");
00343                                 break;
00344                         }
00345                         dprintf(dExecution, "Group: %s -> %s\n", jid, group);
00346 
00347                         out = jabutil_iqnew(JABPACKET__SET, NS_ROSTER);
00348                         x = xode_get_tag(out, "query");
00349                         y = xode_insert_tag(x, "item");
00350                         xode_put_attrib(y, "jid", jid);
00351                         z = xode_insert_tag(y, "group");
00352                         zz = xode_insert_cdata(z, group, strlen(group));
00353 
00354                         jab_send(jab_c, out);
00355                         xode_free(out);
00356 
00357                         update_group(jid, group);
00358 
00359                         jwg_servsuccess(conn, "Group setting successful.");
00360                 } break;
00361 
00362                 case JWGPACKET_REGISTER: {
00363                         xode out, query, queryout, x;
00364                         char *jid, randnum[6];
00365 
00366                         dprintf(dExecution, "Received register\n");
00367 
00368                         jid = xode_get_attrib(packet->x, "jid");
00369                         if (!jid) {
00370                                 jwg_serverror(conn, "JID not specified.");
00371                                 break;
00372                         }
00373                         dprintf(dExecution, "Register: %s\n", jid);
00374 
00375                         query = xode_get_tag(packet->x, "query");
00376                         if (query) {
00377                                 out = jabutil_iqnew(JABPACKET__SET, NS_REGISTER);
00378                                 queryout = xode_get_tag(out, "query");
00379                         }
00380                         else {
00381                                 out = jabutil_iqnew(JABPACKET__GET, NS_REGISTER);
00382                         }
00383                         sprintf(randnum, "%d", random() % 50000);
00384                         xode_put_attrib(out, "id", randnum);
00385                         xode_put_attrib(out, "to", jid);
00386                         if (query) {
00387                                 x = xode_get_firstchild(query);
00388                                 while (x) {
00389                                         xode_insert_node(queryout, x);
00390                                         x = xode_get_nextsibling(x);
00391                                 }
00392                         }
00393                         jab_send(jab_c, out);
00394                         xode_free(out);
00395 
00396                         jab_c->dumpfd = conn->sckfd;
00397                         jab_c->dumpid = randnum;
00398                         jab_recv(jab_c);
00399                         jab_c->dumpfd = -1;
00400                         jab_c->dumpid = NULL;
00401                 } break;
00402 
00403                 case JWGPACKET_SEARCH: {
00404                         xode out, query, queryout, x;
00405                         char *jid, randnum[6];
00406 
00407                         dprintf(dExecution, "Received search\n");
00408 
00409                         jid = xode_get_attrib(packet->x, "jid");
00410                         if (!jid) {
00411                                 jwg_serverror(conn, "JID not specified.");
00412                                 break;
00413                         }
00414                         dprintf(dExecution, "Search: %s\n", jid);
00415 
00416                         query = xode_get_tag(packet->x, "query");
00417                         if (query) {
00418                                 out = jabutil_iqnew(JABPACKET__SET, NS_SEARCH);
00419                                 queryout = xode_get_tag(out, "query");
00420                         }
00421                         else {
00422                                 out = jabutil_iqnew(JABPACKET__GET, NS_SEARCH);
00423                         }
00424                         sprintf(randnum, "%d", random() % 50000);
00425                         xode_put_attrib(out, "id", randnum);
00426                         xode_put_attrib(out, "to", jid);
00427                         if (query) {
00428                                 x = xode_get_firstchild(query);
00429                                 while (x) {
00430                                         xode_insert_node(queryout, x);
00431                                         x = xode_get_nextsibling(x);
00432                                 }
00433                         }
00434                         jab_send(jab_c, out);
00435                         xode_free(out);
00436 
00437                         jab_c->dumpfd = conn->sckfd;
00438                         jab_c->dumpid = randnum;
00439                         jab_recv(jab_c);
00440                         jab_c->dumpfd = -1;
00441                         jab_c->dumpid = NULL;
00442                 } break;
00443 
00444                 case JWGPACKET_SETVAR: {
00445                         xode out, x;
00446                         char *var, *setting;
00447 
00448                         dprintf(dExecution, "Received setvar\n");
00449 
00450                         var = xode_get_attrib(packet->x, "var");
00451                         if (!var) {
00452                                 jwg_serverror(conn, "Variable not specified.");
00453                                 break;
00454                         }
00455 
00456                         setting = xode_get_data(packet->x);
00457                         if (!setting) {
00458                                 jwg_serverror(conn, "Empty setting.");
00459                                 break;
00460                         }
00461 
00462                         if (!jVars_set(jVars_stoi(var), setting)) {
00463                                 jwg_serverror(conn, jVars_get_error());
00464                                 break;
00465                         }
00466                         
00467                         jwg_servsuccess(conn, "Variable successfully set.");
00468                 } break;
00469 
00470                 case JWGPACKET_JOIN: {
00471                         xode out;
00472                         char *chatroom;
00473 
00474                         dprintf(dExecution, "Received join\n");
00475                         chatroom = xode_get_attrib(packet->x, "room");
00476                         if (!chatroom) {
00477                                 jwg_serverror(conn, "Target room not specified.");
00478                                 break;
00479                         }
00480 
00481                         out = jabutil_presnew(-1, chatroom, NULL, -1);
00482                         jab_send(jab_c, out);
00483 
00484                         jwg_servsuccess(conn, "Successfully joined chat room.");
00485                 } break;
00486 
00487                 case JWGPACKET_LEAVE: {
00488                         xode out;
00489                         char *chatroom;
00490 
00491                         dprintf(dExecution, "Received leave\n");
00492                         chatroom = xode_get_attrib(packet->x, "room");
00493                         if (!chatroom) {
00494                                 jwg_serverror(conn, "Target room not specified.");
00495                                 break;
00496                         }
00497 
00498                         out = jabutil_presnew(JABPACKET__UNAVAILABLE, chatroom, NULL, -1);
00499                         jab_send(jab_c, out);
00500 
00501                         remove_from_contact_list(chatroom);
00502 
00503                         jwg_servsuccess(conn, "Successfully left chat room.");
00504                 } break;
00505 
00506                 case JWGPACKET_DEBUG: {
00507                         char *debugflags;
00508 
00509                         dprintf(dExecution, "Received debug\n");
00510                         debugflags = xode_get_tagdata(packet->x, "debugflags");
00511                         if (!debugflags) {
00512                                 jwg_serverror(conn, "You must specify debugging flags.");
00513                                 break;
00514                         }
00515 
00516                         dparseflags(debugflags);
00517 
00518                         jwg_servsuccess(conn, "Successfully adjusted debugging flags.");
00519                 } break;
00520 
00521                 default: {
00522                         dprintf(dExecution, "JwgcEvent: unknown packet.\n");
00523                 } break;
00524         }
00525 
00526         jwg_cleanup(conn);
00527         return;
00528 }

void jwg_set_defaults_handler  ) 
 

Definition at line 105 of file jwgc_variables.c.

References DEFPORT, DEFPRESENCE, DEFPRIORITY, DEFRESOURCE, DEFSERVER, DEFUSEGPG, DEFUSESSL, jVarPort, jVarPresence, jVarPriority, jVarResource, jVars_set(), jVarServer, and setup_jwgc_variable_handlers().

Referenced by main().

00106 {
00107         jVars_set(jVarPresence, DEFPRESENCE);
00108         jVars_set(jVarPriority, DEFPRIORITY);
00109         jVars_set(jVarServer, DEFSERVER);
00110         jVars_set(jVarResource, DEFRESOURCE);
00111         jVars_set(jVarPort, DEFPORT);
00112 #ifdef USE_SSL
00113         jVars_set(jVarUseSSL, DEFUSESSL);
00114 #endif /* USE_SSL */
00115 #ifdef USE_GPGME
00116         jVars_set(jVarUseGPG, DEFUSEGPG);
00117 #endif /* USE_GPGME */
00118 
00119         setup_jwgc_variable_handlers();
00120 }

struct _Node* parse_buffer char *  input_buffer  ) 
 

Definition at line 1548 of file parser.c.

References lex_open_buffer(), node_DestroyAllNodes(), and yyparse().

Referenced by read_in_description_file().

01550 {
01551     the_program = NULL;
01552     error_occured = 0;
01553     node_DestroyAllNodes();
01554 
01555     lex_open_buffer(input_buffer);
01556     yyparse();
01557 
01558     if (error_occured) {
01559         node_DestroyAllNodes();
01560         the_program = NULL;
01561     }
01562 
01563     return(the_program);
01564 }

struct _Node* parse_file FILE *  input_file  ) 
 

Definition at line 1529 of file parser.c.

References lex_open(), node_DestroyAllNodes(), and yyparse().

Referenced by read_in_description_file().

01531 {
01532     the_program = NULL;
01533     error_occured = 0;
01534     node_DestroyAllNodes();
01535 
01536     lex_open(input_file);
01537     yyparse();
01538     fclose(input_file);
01539 
01540     if (error_occured) {
01541         node_DestroyAllNodes();
01542         the_program = NULL;
01543     }
01544 
01545     return(the_program);
01546 }

int read_in_description_file  ) 
 

Definition at line 82 of file main.c.

References barebones_desc, DEFDESC, description_filename_override, fake_startup_packet(), locate_file(), parse_buffer(), parse_file(), program, and USRDESC.

Referenced by jwg_on_event_handler(), and main().

00083 {
00084         FILE *input_file;
00085         char *defdesc;
00086 
00087         defdesc = (char *)malloc(sizeof(char) * (strlen(DATADIR) + 1 +
00088                         strlen(DEFDESC) + 1));
00089 
00090         sprintf(defdesc, "%s/%s", DATADIR, DEFDESC);
00091         input_file = (FILE *) locate_file(description_filename_override,
00092                         USRDESC, defdesc);
00093         free(defdesc);
00094         if (input_file)
00095                 program = (struct _Node *) parse_file(input_file);
00096         else
00097                 program = NULL;
00098 
00099         if (program == NULL)
00100                 program = (struct _Node *) parse_buffer(barebones_desc);
00101 
00102         if (program != NULL) {
00103                 fake_startup_packet();
00104                 return 1;
00105         }
00106         else {
00107                 return 0;
00108         }
00109 }

void show_status  ) 
 

Definition at line 4 of file status.c.

References jab_c, jab_connect_time, jab_contype_to_ascii(), jwg_c, jwg_servsend(), list_agents(), MACHINE_TYPE, NULL, jid_struct::resource, jid_struct::server, jabconn_struct::state, jabconn_struct::user, jid_struct::user, xode, xode_free(), xode_insert_cdata(), xode_insert_tag(), and xode_new().

Referenced by jwg_on_event_handler().

00005 {
00006         char retstr[255];
00007         char tmpstr[50];
00008         time_t curtime;
00009         xode x, y;
00010 
00011         x = xode_new("status");
00012         y = xode_insert_tag(x, "user");
00013         xode_insert_cdata(y, jab_c->user->user, strlen(jab_c->user->user) + 1);
00014         y = xode_insert_tag(x, "server");
00015         xode_insert_cdata(y, jab_c->user->server, strlen(jab_c->user->server) + 1);
00016         y = xode_insert_tag(x, "resource");
00017         xode_insert_cdata(y, jab_c->user->resource, strlen(jab_c->user->resource) + 1);
00018         y = xode_insert_tag(x, "version");
00019         xode_insert_cdata(y, VERSION, strlen(VERSION) + 1);
00020         y = xode_insert_tag(x, "machinetype");
00021         xode_insert_cdata(y, MACHINE_TYPE, strlen(MACHINE_TYPE) + 1);
00022 
00023         curtime = time(NULL);
00024         strftime(tmpstr, 50, "%A  %B %e, %Y  %I:%M %p", localtime(&curtime));
00025         y = xode_insert_tag(x, "localtime");
00026         xode_insert_cdata(y, tmpstr, strlen(tmpstr) + 1);
00027 
00028         strftime(tmpstr, 50, "%A  %B %e, %Y  %I:%M %p", localtime(&jab_connect_time));
00029         y = xode_insert_tag(x, "connecttime");
00030         xode_insert_cdata(y, tmpstr, strlen(tmpstr) + 1);
00031 
00032         y = xode_insert_tag(x, "connectstate");
00033         xode_insert_cdata(y, jab_contype_to_ascii(jab_c->state),
00034                           strlen(jab_contype_to_ascii(jab_c->state)) + 1);
00035 
00036         list_agents(x);
00037 
00038         y = xode_insert_tag(x, "bugreport");
00039         xode_insert_cdata(y, PACKAGE_BUGREPORT, strlen(PACKAGE_BUGREPORT) + 1);
00040 
00041         jwg_servsend(jwg_c, x);
00042         xode_free(x);
00043 }

void usage  ) 
 

Definition at line 28 of file jctl.c.

00029 {
00030         fprintf(stderr, "Usage: %s %s[-h] command <args...>\n%s\
00031   -h       Display help\n\
00032 \n\
00033   Commands:\n\
00034      help                      Display help\n\
00035      reread                    Reread description file (.jwgc.desc)\n\
00036      subscribe <jid>           Subscribe to <jid>'s presence\n\
00037      unsubscribe <jid>         Unsubscribe from <jid>'s presence\n\
00038      nickname <jid> <nick>     Sets a nickname <nick> on <jid>\n\
00039      group <jid> <group>       Sets a group <group> on <jid>\n\
00040      set <var> <setting>       Set variable <var> to <setting>\n\
00041      show <var>                Show variable setting of <var>\n\
00042      shutdown                  Log off of jabber server and shut down jwgc\n\
00043      join <chatroom jid>       Join a jabber groupchat room\n\
00044      leave <chatroom jid>      Leave a jabber groupchat room\n\
00045      register <jid>            Register with agent <jid>\n\
00046      search <jid>              Search with agent <jid>\n%s\
00047 \n\
00048   <nick> in nickname and <group> in group can be left blank to unset a\n\
00049   nickname or group, respectively.\n\
00050 ",
00051         whoami,
00052 #ifdef NODEBUG
00053         "",
00054         "",
00055         ""
00056 #else
00057         "[-d <flags>] ",
00058         "  -d       Enable/Disable debugging (leave <flags> blank for usage)\n",
00059         "     debug <debug flags>       Modify current debugging flags\n"
00060 #endif /* NODEBUG */
00061         );
00062 
00063         exit(1);
00064 }

void var_clear_all_variables  ) 
 

Definition at line 76 of file variables.c.

Referenced by main().

00077 {
00078         if (non_number_variable_dict) {
00079                 string_dictionary_SafeDestroy(non_number_variable_dict);
00080                 string_dictionary_SafeDestroy(number_variable_dict);
00081         }
00082 
00083         non_number_variable_dict = string_dictionary_Create(101);
00084         number_variable_dict = string_dictionary_Create(11);
00085         fields_data_length = 0;
00086 }


Variable Documentation

jabconn jab_c
 

Definition at line 9 of file main.c.

Referenced by fake_startup_packet(), jab_on_state_handler(), jabber_finalize(), jabber_init(), jwg_on_event_handler(), jwgc_change_presence_event_handler(), and show_status().

time_t jab_connect_time
 

Definition at line 11 of file main.c.

Referenced by jabber_init(), process_presence(), and show_status().

int jab_reauth
 

Definition at line 13 of file main.c.

Referenced by jab_on_state_handler(), and jabber_init().

jwgconn jwg_c
 

Definition at line 10 of file main.c.

Referenced by jabber_finalize(), jwg_on_event_handler(), jwgc_init(), and show_status().

char* progname
 

Definition at line 16 of file main.c.

Referenced by init_standard_ports(), main(), and run_initprogs().

struct _Node* program
 

Definition at line 18 of file main.c.

Referenced by exec_process_packet(), jab_on_packet_handler(), process_presence(), and read_in_description_file().



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

Source Perspective by Fisheye