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.c File Reference

#include "mux.h"
#include "file.h"
#include "parser.h"
#include "port.h"
#include "main.h"

Go to the source code of this file.

Defines

#define ALARMTIMEOUT   60

Functions

void usage ()
void fake_startup_packet ()
int read_in_description_file ()
void check_live_jwgc_on_event_handler (jwgconn conn, jwgpacket packet)
void check_live_jwgc ()
void jwgc_init ()
void jabber_init ()
void jabber_finalize ()
void run_initprogs ()
int main (int argc, char **argv)

Variables

jabconn jab_c = NULL
jwgconn jwg_c = NULL
time_t jab_connect_time = 0
int jwgc_register = 0
int jab_reauth = 0
char * whoami = NULL
char * progname = NULL
char * description_filename_override = NULL
_Nodeprogram = NULL
char * current_presence = "available"
char * barebones_desc


Define Documentation

#define ALARMTIMEOUT   60
 

Definition at line 7 of file main.c.

Referenced by jabber_init(), and main().


Function Documentation

void check_live_jwgc  ) 
 

Definition at line 119 of file main.c.

References check_live_jwgc_on_event_handler(), dExecution, dprintf(), jwg_event_handler(), jwg_getfd(), jwg_new(), jwg_poll(), jwg_send(), jwg_start(), jwg_stop(), jwgconn, xode, xode_free(), and xode_new().

Referenced by main().

00120 {
00121         jwgconn checkjwg;
00122         xode x;
00123 
00124         checkjwg = jwg_new();
00125         if (!checkjwg) {
00126                 dprintf(dExecution, "check_live_jwgc: failed to initialize jwgc connection\n");
00127                 return;
00128         }
00129 
00130         jwg_event_handler(checkjwg, check_live_jwgc_on_event_handler);
00131         jwg_start(checkjwg);
00132         if (jwg_getfd(checkjwg) < 0) {
00133                 dprintf(dExecution, "check_live_jwgc: failed to create jwgc connection\n");
00134                 return;
00135         }
00136 
00137         x = xode_new("check");
00138         jwg_send(checkjwg, x);
00139         xode_free(x);
00140 
00141         jwg_poll(checkjwg, -1);
00142         jwg_stop(checkjwg);
00143 }

void check_live_jwgc_on_event_handler jwgconn  conn,
jwgpacket  packet
 

Definition at line 112 of file main.c.

References jwgconn, and jwgpacket.

Referenced by check_live_jwgc().

00113 {
00114         fprintf(stderr, "There is already an active jwgc running!  Exiting...\n");
00115         exit(0);
00116 }

void fake_startup_packet  ) 
 

Definition at line 68 of file main.c.

References jab_c, jab_send(), jabutil_msgnew(), jVarJID, jVars_get(), NULL, xode, and xode_free().

Referenced by read_in_description_file().

00069 {
00070         xode fake;
00071 
00072         fake = jabutil_msgnew("internal",
00073                         (char *)jVars_get(jVarJID),
00074                         "startup",
00075                         "Jabber Windowgram Client Started...",
00076                         NULL);
00077         jab_send(jab_c, fake);
00078         xode_free(fake);
00079 }

void jabber_finalize  ) 
 

Definition at line 199 of file main.c.

References jab_c, jab_stop(), JCleanupSocket(), jwg_c, and jwg_stop().

Referenced by main().

00200 {
00201         jab_stop(jab_c);
00202         jwg_stop(jwg_c);
00203         JCleanupSocket();
00204 }

void jabber_init  ) 
 

Definition at line 163 of file main.c.

References ALARMTIMEOUT, dExecution, dprintf(), jab_auth(), jab_c, jab_connect_time, jab_getfd(), jab_new(), jab_on_packet_handler(), jab_on_state_handler(), jab_packet_handler(), jab_reauth, jab_recv(), jab_reg(), jab_start(), jab_startup(), jab_state_handler(), jVarJID, jVarPassword, jVarPort, jVars_get(), jwgc_register, mux_add_input_source(), jabconn_struct::port, and jabconn_struct::state.

Referenced by main().

00164 {
00165         jab_reauth = 0;
00166         jab_c = jab_new((char *)jVars_get(jVarJID), (char *)jVars_get(jVarPassword));
00167         if (!jab_c) {
00168                 fprintf(stderr, "jwgc: unable to create jabber connection.\n");
00169                 exit(1);
00170         }
00171         jab_c->port = *(int *)jVars_get(jVarPort);
00172         jab_packet_handler(jab_c, jab_on_packet_handler);
00173         jab_state_handler(jab_c, jab_on_state_handler);
00174         jab_start(jab_c,
00175 #ifdef USE_SSL
00176                 *(int *) jVars_get(jVarUseSSL)
00177 #else /* USE_SSL */
00178                 0
00179 #endif /* USE_SSL */
00180         );
00181         if (jwgc_register) {
00182                 dprintf(dExecution, "Registering user...\n");
00183                 jab_reg(jab_c);
00184                 jwgc_register = 0;
00185         }
00186         jab_auth(jab_c);
00187         if (jab_c->state == JABCONN_STATE_OFF) {
00188                 fprintf(stderr, "Unable to connect to jabber server.  Retrying in %d seconds.\n", ALARMTIMEOUT);
00189                 jab_reauth = 1;
00190                 return;
00191         }
00192         mux_add_input_source(jab_getfd(jab_c), jab_recv, jab_c);
00193 
00194         jab_startup(jab_c);
00195         jab_connect_time = time(0);
00196 }

void jwgc_init  ) 
 

Definition at line 146 of file main.c.

References jwg_c, jwg_event_handler(), jwg_getfd(), jwg_on_event_handler(), jwg_server(), jwg_servrecv(), jwg_servstart(), and mux_add_input_source().

Referenced by main().

00147 {
00148         jwg_c = jwg_server();
00149         if (!jwg_c) {
00150                 fprintf(stderr, "jwgc: unable to initialize jwgc connection.\n");
00151                 exit(1);
00152         }
00153         jwg_event_handler(jwg_c, jwg_on_event_handler);
00154         jwg_servstart(jwg_c);
00155         if (jwg_getfd(jwg_c) < 0) {
00156                 fprintf(stderr, "jwgc: unable to create jwgc connection.\n");
00157                 exit(1);
00158         }
00159         mux_add_input_source(jwg_getfd(jwg_c), jwg_servrecv, jwg_c);
00160 }

int main int  argc,
char **  argv
 

Definition at line 412 of file main.c.

References ALARMTIMEOUT, check_live_jwgc(), DEFSSLPORT, description_filename_override, dExecution, dinit(), dparseflags(), dprintf(), dprinttypes(), init_ports(), init_standard_ports(), jabber_finalize(), jabber_init(), jVarJID, jVarPassword, jVarPort, jVarPriority, jVarResource, jVars_get(), jVars_init(), jVars_set(), jVars_set_defaults_handler(), jVarServer, jVarUsername, jwg_set_defaults_handler(), jwgc_init(), jwgc_register, mux_init(), mux_loop(), progname, read_in_description_file(), run_initprogs(), snprintf, string_Eq, usage(), var_clear_all_variables(), and whoami.

00415 {
00416         extern char *optarg;
00417         extern int optind;
00418         char prompt[256];
00419         char **new;
00420         register char **current;
00421         int dofork = 1;
00422         int portset = 0;
00423 
00424         whoami = argv[0];
00425         progname = argv[0];
00426 #ifndef NODEBUG
00427         dinit();
00428         for (new = current = argv + 1; *current; current++) {
00429                 if (string_Eq(*current, "-debug")) {
00430                         argc -= 2;
00431                         current++;
00432                         if (!*current)
00433                                 dprinttypes();
00434                         dparseflags(*current);
00435                 }
00436         }
00437 #endif /* NODEBUG */
00438         jVars_set_defaults_handler(jwg_set_defaults_handler);
00439         jVars_init();
00440 
00441         for (new = current = argv + 1; *current; current++) {
00442                 if (string_Eq(*current, "-h") ||
00443                     string_Eq(*current, "-help")) {
00444                         usage();
00445                 }
00446 #ifndef NODEBUG
00447                 else if (string_Eq(*current, "-debug")) {
00448                         argc -= 2;
00449                         current++;
00450                         /* we already checked this above */
00451                 }
00452 #endif /* NODEBUG */
00453                 else if (string_Eq(*current, "-f") ||
00454                          string_Eq(*current, "-descfile")) {
00455                         argc -= 2;
00456                         current++;
00457                         if (!*current)
00458                                 usage();
00459                         description_filename_override = *current;
00460                 }
00461                 else if (string_Eq(*current, "-j") ||
00462                          string_Eq(*current, "-jid")) {
00463                         argc -= 2;
00464                         current++;
00465                         if (!*current)
00466                                 usage();
00467                         jVars_set(jVarJID, *current);
00468                 }
00469                 else if (string_Eq(*current, "-port")) {
00470                         argc -= 2;
00471                         current++;
00472                         if (!*current)
00473                                 usage();
00474                         jVars_set(jVarPort, *current);
00475                         portset = 1;
00476                 }
00477                 else if (string_Eq(*current, "-priority")) {
00478                         argc -= 2;
00479                         current++;
00480                         if (!*current)
00481                                 usage();
00482                         jVars_set(jVarPriority, *current);
00483                 }
00484                 else if (string_Eq(*current, "-nofork")) {
00485                         argc--;
00486                         dofork = 0;
00487                 }
00488                 else if (string_Eq(*current, "-register")) {
00489                         argc--;
00490                         jwgc_register = 1;
00491                 }
00492 #ifdef USE_SSL
00493                 else if (string_Eq(*current, "-ssl")) {
00494                         argc--;
00495                         jVars_set(jVarUseSSL, "1");
00496                 }
00497                 else if (string_Eq(*current, "-nossl")) {
00498                         argc--;
00499                         jVars_set(jVarUseSSL, "0");
00500                 }
00501 #endif /* USE_SSL */
00502 #ifdef USE_GPGME
00503                 else if (string_Eq(*current, "-gpg")) {
00504                         argc--;
00505                         jVars_set(jVarUseGPG, "1");
00506                 }
00507                 else if (string_Eq(*current, "-nogpg")) {
00508                         argc--;
00509                         jVars_set(jVarUseGPG, "0");
00510                 }
00511                 else if (string_Eq(*current, "-gpgpass")) {
00512                         argc -= 2;
00513                         current++;
00514                         if (!*current)
00515                                 usage();
00516                         jVars_set(jVarGPGPass, *current);
00517                 }
00518 #endif /* USE_GPGME */
00519                 else if (string_Eq(*current, "-u") ||
00520                          string_Eq(*current, "-username")) {
00521                         argc -= 2;
00522                         current++;
00523                         if (!*current)
00524                                 usage();
00525                         jVars_set(jVarUsername, *current);
00526                 }
00527                 else if (string_Eq(*current, "-s") ||
00528                          string_Eq(*current, "-server")) {
00529                         argc -= 2;
00530                         current++;
00531                         if (!*current)
00532                                 usage();
00533                         jVars_set(jVarServer, *current);
00534                 }
00535                 else if (string_Eq(*current, "-r") ||
00536                          string_Eq(*current, "-resource")) {
00537                         argc -= 2;
00538                         current++;
00539                         if (!*current)
00540                                 usage();
00541                         jVars_set(jVarResource, *current);
00542                 }
00543                 else if (string_Eq(*current, "-p") ||
00544                          string_Eq(*current, "-password")) {
00545                         argc -= 2;
00546                         current++;
00547                         if (!*current)
00548                                 usage();
00549                         jVars_set(jVarPassword, *current);
00550                 }
00551                 else
00552                         *(new)++ = *current;
00553         }
00554         *new = *current;
00555 
00556 #ifdef USE_SSL
00557         if (!portset && *(int *)jVars_get(jVarUseSSL)) {
00558                 jVars_set(jVarPort, DEFSSLPORT);
00559         }
00560 #endif /* USE_SSL */
00561 
00562         if (jVars_get(jVarUsername) == NULL) {
00563                 if (!jVars_set(jVarUsername, getlogin())) {
00564                         printf("No username specified.\n");
00565                         exit(0);
00566                 }
00567         }
00568 
00569         if (jVars_get(jVarPassword) == NULL) {
00570                 snprintf(prompt, 255, "Password for %s@%s:",
00571                                 (char *)jVars_get(jVarUsername),
00572                                 (char *)jVars_get(jVarServer));
00573 #ifdef HAVE_GETPASSPHRASE
00574                 if (!jVars_set(jVarPassword, getpassphrase(prompt))) {
00575 #else
00576                 if (!jVars_set(jVarPassword, getpass(prompt))) {
00577 #endif
00578                         printf("No password specified.\n");
00579                         exit(0);
00580                 }
00581         }
00582 
00583         mux_init();
00584         var_clear_all_variables();
00585         init_ports();
00586         dprintf(dExecution, "Initializing standard ports...\n");
00587         init_standard_ports(&argc, argv);
00588         if (argc > 1)
00589                 usage();
00590         check_live_jwgc();
00591         setup_signals(dofork);
00592 
00593         if (!jVars_get(jVarJID)) {
00594                 char *jwgcjid;
00595                 dprintf(dExecution, "Creating JID...\n");
00596                 jwgcjid = (char *) malloc(sizeof(char) *
00597                         (strlen((char *)jVars_get(jVarUsername))
00598                         + strlen((char *)jVars_get(jVarServer))
00599                         + strlen((char *)jVars_get(jVarResource)) + 3));
00600                 sprintf(jwgcjid, "%s@%s/%s",
00601                         (char *)jVars_get(jVarUsername),
00602                         (char *)jVars_get(jVarServer),
00603                         (char *)jVars_get(jVarResource));
00604                 dprintf(dExecution, "JID = %s\n", jwgcjid ? jwgcjid : "n/a");
00605                 jVars_set(jVarJID, jwgcjid);
00606                 free(jwgcjid);
00607         }
00608         else {
00609                 dprintf(dExecution, "JID already set to %s.\n",
00610                                 (char *)jVars_get(jVarJID));
00611         }
00612         jwgc_init();
00613         jabber_init();
00614 
00615         if (dofork)
00616                 detach();
00617 
00618         run_initprogs();
00619 
00620         read_in_description_file();
00621 
00622         alarm(ALARMTIMEOUT);
00623 
00624         mux_loop();
00625 
00626         jabber_finalize();
00627 
00628         exit(0);
00629 }

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 run_initprogs  ) 
 

Definition at line 207 of file main.c.

References dExecution, dprintf(), jVarInitProgs, jVars_get(), and progname.

Referenced by main().

00208 {
00209         int status;
00210         char *progname = (char *)jVars_get(jVarInitProgs);
00211 
00212         if (!progname)
00213                 return;
00214 
00215         dprintf(dExecution, "Running init program... %s\n", progname);
00216 
00217         status = system(progname);
00218         if (status == 127) {
00219                 perror("jwgc initprog exec");
00220                 fprintf(stderr, "jwgc initprog of <%s> failed: no shell.\n",
00221                         progname);
00222         }
00223         else if (status != -1 && status >> 8) {
00224                 perror("jwgc initprog exec");
00225                 fprintf(stderr, "jwgc initprog of <%s> failed with status [%d].\n",
00226                         progname, status >> 8);
00227         }
00228 }

void usage  ) 
 

Definition at line 38 of file main.c.

References whoami.

00039 {
00040         fprintf(stderr, "\
00041 Usage: %s [-h] [-f <filename>]\n\
00042                   [-u <username>] [-p <password>]\n\
00043                   [-r <resource>] [-s <server>] [-j <jid>]\n\
00044                   [-port <port>] [-priority <priority>]\n\
00045                   [-ttymode] [-nofork] [-register]\n\
00046                   [-default <driver>] {-disable <driver>}*\n\
00047                   [output driver options]\n\
00048 ", whoami);
00049 #ifdef USE_GPGME
00050         fprintf(stderr, "\
00051                   [-gpg] [-nogpg] [-gpgpass <password>]\n\
00052 ");
00053 #endif /* USE_GPGME */
00054 #ifdef USE_SSL
00055         fprintf(stderr, "\
00056                   [-ssl] [-nossl]\n\
00057 ");
00058 #endif /* USE_SSL */
00059 #ifndef NODEBUG
00060         fprintf(stderr, "\
00061                   [-debug <flags>]\n\
00062 ");
00063 #endif /* NODEBUG */
00064         exit(1);
00065 }


Variable Documentation

char* barebones_desc
 

Initial value:

 "\
fields body\n\
print \"@b(Description file is broken!  This is a barebones config.)\\n\"\n\
print \"Date:    \"+$date+\"\\n\"\n\
print \"Time:    \"+$time+\"\\n\"\n\
print \"From:    \"+$from+\"\\n\"\n\
print \"Status:  \"+$status+\"\\n\"\n\
print \"Show:    \"+$show+\"\\n\"\n\
print \"Type:    \"+$type+\"\\n\"\n\
print \"Subtype: \"+$subtype+\"\\n\"\n\
print \"Body:\\n\"+$body+\"\\n\"\n\
put\n\
exit\n\
"

Definition at line 22 of file main.c.

Referenced by read_in_description_file().

char* current_presence = "available"
 

Definition at line 20 of file main.c.

char* description_filename_override = NULL
 

Definition at line 17 of file main.c.

Referenced by main(), and read_in_description_file().

jabconn jab_c = NULL
 

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 = 0
 

Definition at line 11 of file main.c.

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

int jab_reauth = 0
 

Definition at line 13 of file main.c.

Referenced by jab_on_state_handler(), and jabber_init().

jwgconn jwg_c = NULL
 

Definition at line 10 of file main.c.

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

int jwgc_register = 0
 

Definition at line 12 of file main.c.

Referenced by jabber_init(), and main().

char* progname = NULL
 

Definition at line 16 of file main.c.

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

struct _Node* program = NULL
 

Definition at line 18 of file main.c.

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

char* whoami = NULL
 

Definition at line 15 of file main.c.



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

Source Perspective by Fisheye