|
|
#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) |
_Node * | parse_file (FILE *input_file) |
_Node * | parse_buffer (char *input_buffer) |
void | show_status () |
void | var_clear_all_variables () |
Variables | |
_Node * | program |
char * | progname |
int | jab_reauth |
jabconn | jab_c |
jwgconn | jwg_c |
time_t | jab_connect_time |
|
Definition at line 24 of file main.h. Referenced by read_in_description_file(). |
|
Definition at line 32 of file main.h. Referenced by jwg_set_defaults_handler(). |
|
Definition at line 44 of file main.h. Referenced by jwg_set_defaults_handler(). |
|
Definition at line 48 of file main.h. Referenced by jwg_set_defaults_handler(). |
|
Definition at line 40 of file main.h. Referenced by jwg_set_defaults_handler(). |
|
Definition at line 28 of file main.h. Referenced by jwg_set_defaults_handler(). |
|
Definition at line 36 of file main.h. Referenced by main(). |
|
Definition at line 56 of file main.h. Referenced by jwg_set_defaults_handler(). |
|
Definition at line 52 of file main.h. Referenced by jwg_set_defaults_handler(). |
|
Definition at line 60 of file main.h. Referenced by show_status(). |
|
Definition at line 20 of file main.h. Referenced by read_in_description_file(). |
|
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 }
|
|
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 }
|
|
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 }
|
|
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 }
|
|
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 }
|
|
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 }
|
|
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 }
|
|
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 }
|
|
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 }
|
|
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 }
|
|
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 }
|
|
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(). |
|
Definition at line 11 of file main.c. Referenced by jabber_init(), process_presence(), and show_status(). |
|
Definition at line 13 of file main.c. Referenced by jab_on_state_handler(), and jabber_init(). |
|
Definition at line 10 of file main.c. Referenced by jabber_finalize(), jwg_on_event_handler(), jwgc_init(), and show_status(). |
|
Definition at line 16 of file main.c. Referenced by init_standard_ports(), main(), and run_initprogs(). |
|
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... |