diff --git a/src/syncterm/conn.c b/src/syncterm/conn.c index a66bb4563f8ef908a902a66f2b4d965302ee1718..5dcdbb952177f8cc8f5f890cb18aeaa19ba5bd0f 100644 --- a/src/syncterm/conn.c +++ b/src/syncterm/conn.c @@ -184,17 +184,20 @@ int conn_send(char *buffer, size_t buflen, unsigned int timeout) return(0); } -int conn_connect(char *addr, int port, char *ruser, char *passwd, char *syspass, int conn_type, int speed) +int conn_connect(struct bbslist *bbs) { HOSTENT *ent; SOCKADDR_IN saddr; char *p; unsigned int neta; + char *ruser; + char *passwd; init_uifc(TRUE, TRUE); + con_type=bbs->conn_type; #ifdef USE_CRYPTLIB - if(conn_type==CONN_TYPE_SSH) { + if(con_type==CONN_TYPE_SSH) { if(!crypt_loaded) init_crypt(); if(!crypt_loaded) { @@ -214,20 +217,25 @@ int conn_connect(char *addr, int port, char *ruser, char *passwd, char *syspass, } #endif - con_type=conn_type; - for(p=addr;*p;p++) + ruser=bbs->user; + passwd=bbs->password; + if(con_type==CONN_TYPE_RLOGIN && bbs->reversed) { + passwd=bbs->user; + ruser=bbs->password; + } + for(p=bbs->addr;*p;p++) if(*p!='.' && !isdigit(*p)) break; if(!(*p)) - neta=inet_addr(addr); + neta=inet_addr(bbs->addr); else { uifc.pop("Lookup up host"); - if((ent=gethostbyname(addr))==NULL) { + if((ent=gethostbyname(bbs->addr))==NULL) { char str[LIST_ADDR_MAX+17]; uifc.pop(NULL); - sprintf(str,"Cannot resolve %s!",addr); + sprintf(str,"Cannot resolve %s!",bbs->addr); uifcmsg(str, "`Cannot Resolve Host`\n\n" "The system is unable to resolve the hostname... double check the spelling.\n" "If it's not an issue with your DNS settings, the issue is probobly\n" @@ -250,14 +258,14 @@ int conn_connect(char *addr, int port, char *ruser, char *passwd, char *syspass, memset(&saddr,0,sizeof(saddr)); saddr.sin_addr.s_addr = neta; saddr.sin_family = AF_INET; - saddr.sin_port = htons((WORD)port); + saddr.sin_port = htons((WORD)bbs->port); if(connect(conn_socket, (struct sockaddr *)&saddr, sizeof(saddr))) { char str[LIST_ADDR_MAX+20]; conn_close(); uifc.pop(NULL); - sprintf(str,"Cannot connect to %s!",addr); + sprintf(str,"Cannot connect to %s!",bbs->addr); uifcmsg(str, "`Unable to connect`\n\n" "Cannot connect to the remote system... it is down or unreachable."); return(-1); @@ -273,9 +281,9 @@ int conn_connect(char *addr, int port, char *ruser, char *passwd, char *syspass, conn_send("",1,1000); conn_send(passwd,strlen(passwd)+1,1000); conn_send(ruser,strlen(ruser)+1,1000); - if(speed) { + if(bbs->bpsrate) { char sbuf[30]; - sprintf(sbuf, "ansi-bbs/%d", speed); + sprintf(sbuf, "ansi-bbs/%d", bbs->bpsrate); conn_send(sbuf, strlen(sbuf)+1,1000); } diff --git a/src/syncterm/conn.h b/src/syncterm/conn.h index 5150ac2443c2fab7ee889db91400e59ecf62499f..066f7a898bc13e48ab6fc33f7934e5c7d46e73cf 100644 --- a/src/syncterm/conn.h +++ b/src/syncterm/conn.h @@ -5,6 +5,8 @@ #include "sockwrap.h" +#include "bbslist.h" + extern SOCKET conn_socket; extern char *conn_types[]; extern int conn_ports[]; @@ -22,7 +24,7 @@ enum { int conn_recv(char *buffer, size_t buflen, unsigned int timeout); int conn_send(char *buffer, size_t buflen, unsigned int timeout); -int conn_connect(char *addr, int port, char *ruser, char *passwd, char *syspass, int conn_type, int speed); +int conn_connect(struct bbslist *bbs); int conn_close(void); BOOL conn_is_connected(void); void conn_settype(int type); diff --git a/src/syncterm/syncterm.c b/src/syncterm/syncterm.c index 26f1ac0d748052af606b220fba2253a7eef7ee27..26d3b3b60b570697f84e42284318e02e6deab43a 100644 --- a/src/syncterm/syncterm.c +++ b/src/syncterm/syncterm.c @@ -419,9 +419,6 @@ int main(int argc, char **argv) else FULLPATH(path,inpath,sizeof(path)); atexit(uifcbail); -#ifdef USE_CRYPTLIB - atexit(exit_crypt); -#endif scrollback_buf=malloc(80*2*settings.backlines); /* Terminal width is *always* 80 cols */ if(scrollback_buf==NULL) { @@ -458,7 +455,7 @@ int main(int argc, char **argv) load_font_files(); while(bbs!=NULL || (bbs=show_bbslist(BBSLIST_SELECT))!=NULL) { gettextinfo(&txtinfo); /* Current mode may have changed while in show_bbslist() */ - if(!conn_connect(bbs->addr,bbs->port,bbs->reversed?bbs->password:bbs->user,bbs->reversed?bbs->user:bbs->password,bbs->syspass,bbs->conn_type,bbs->bpsrate)) { + if(!conn_connect(bbs)) { /* ToDo: Update the entry with new lastconnected */ /* ToDo: Disallow duplicate entries */ bbs->connected=time(NULL); @@ -499,8 +496,12 @@ int main(int argc, char **argv) sprintf(str,"SyncTERM - %s",bbs->name); settitle(str); term.nostatus=bbs->nostatus; - if(drawwin()) + if(drawwin()) { +#ifdef USE_CRYPTLIB + atexit(exit_crypt); +#endif return(1); + } if(log_fp==NULL && bbs->logfile[0]) log_fp=fopen(bbs->logfile,"a"); if(log_fp!=NULL) { @@ -550,6 +551,9 @@ int main(int argc, char **argv) #ifdef _WINSOCKAPI_ if(WSAInitialized && WSACleanup()!=0) fprintf(stderr,"!WSACleanup ERROR %d",ERROR_VALUE); +#endif +#ifdef USE_CRYPTLIB + atexit(exit_crypt); #endif return(0);