|
| |||||||||||||
#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... |