--- sbbs/src/sbbs3/sbbs.h 2018/04/24 16:41:23 1.1 +++ sbbs/src/sbbs3/sbbs.h 2018/04/24 16:42:54 1.1.1.2 @@ -2,13 +2,13 @@ /* Synchronet class (sbbs_t) definition and exported function prototypes */ -/* $Id: sbbs.h,v 1.1 2018/04/24 16:41:23 root Exp $ */ +/* $Id: sbbs.h,v 1.1.1.2 2018/04/24 16:42:54 root Exp $ */ /**************************************************************************** * @format.tab-size 4 (Plain Text/Source Code File Header) * * @format.use-tabs true (see http://www.synchro.net/ptsc_hdr.html) * * * - * Copyright 2006 Rob Swindell - http://www.synchro.net/copyright.html * + * Copyright 2011 Rob Swindell - http://www.synchro.net/copyright.html * * * * This program is free software; you can redistribute it and/or * * modify it under the terms of the GNU General Public License * @@ -116,29 +116,31 @@ extern int thread_suid_broken; /* NPTL #include #endif -/***********************/ -/* Synchronet-specific */ -/***********************/ -#ifdef __cplusplus - #include "startup.h" - #include "threadwrap.h" /* pthread_mutex_t */ -#endif -#ifdef SBBS - #include "text.h" -#endif - /* xpdev */ #ifndef LINK_LIST_THREADSAFE #define LINK_LIST_THREADSAFE #endif #include "genwrap.h" #include "semfile.h" +#include "netwrap.h" #include "dirwrap.h" #include "filewrap.h" +#include "datewrap.h" #include "sockwrap.h" +#include "eventwrap.h" #include "link_list.h" #include "msg_queue.h" +#include "xpdatetime.h" +/***********************/ +/* Synchronet-specific */ +/***********************/ +#include "startup.h" +#ifdef __cplusplus + #include "threadwrap.h" /* pthread_mutex_t */ +#endif + +#include "comio.h" #include "smblib.h" #include "ars_defs.h" #include "scfgdefs.h" @@ -152,6 +154,7 @@ extern int thread_suid_broken; /* NPTL #include "crc32.h" #include "telnet.h" #include "nopen.h" +#include "text.h" /* Synchronet Node Instance class definition */ #ifdef __cplusplus @@ -160,7 +163,7 @@ class sbbs_t public: - sbbs_t(ushort node_num, DWORD addr, char* host_name, SOCKET + sbbs_t(ushort node_num, SOCKADDR_IN addr, const char* host_name, SOCKET ,scfg_t*, char* text[], client_t* client_info); ~sbbs_t(); @@ -172,7 +175,7 @@ public: client_t client; SOCKET client_socket; SOCKET client_socket_dup; - DWORD client_addr; + SOCKADDR_IN client_addr; char client_name[128]; char client_ident[128]; DWORD local_addr; @@ -200,21 +203,23 @@ public: int outcom(uchar ch); // send character int incom(unsigned long timeout=0); // receive character - void spymsg(char *msg); // send message to active spies + void spymsg(const char *msg); // send message to active spies - void putcom(char *str, int len=0); // Send string + int putcom(const char *str, size_t len=0); // Send string void hangup(void); // Hangup modem uchar telnet_local_option[0x100]; uchar telnet_remote_option[0x100]; void send_telnet_cmd(uchar cmd, uchar opt); - void request_telnet_opt(uchar cmd, uchar opt); + bool request_telnet_opt(uchar cmd, uchar opt, unsigned waitforack=0); uchar telnet_cmd[64]; uint telnet_cmdlen; ulong telnet_mode; uchar telnet_last_rxch; + char telnet_location[128]; char terminal[TELNET_TERM_MAXLEN+1]; + xpevent_t telnet_ack_event; time_t event_time; // Time of next exclusive event char* event_code; // Internal code of next exclusive event @@ -228,8 +233,9 @@ public: JSContext* js_cx; JSObject* js_glob; js_branch_t js_branch; - long js_execfile(const char *fname); + long js_execfile(const char *fname, const char* startup_dir, JSObject* scope=NULL); bool js_init(ulong* stack_frame); + void js_cleanup(const char* node); void js_create_user_objects(void); #endif @@ -275,10 +281,13 @@ public: /*********************************/ char *text[TOTAL_TEXT]; /* Text from ctrl\text.dat */ char *text_sav[TOTAL_TEXT]; /* Text from ctrl\text.dat */ + char dszlog[127]; /* DSZLOG enviornment variable */ int keybuftop,keybufbot; /* Keyboard input buffer pointers (for ungetkey) */ - char keybuf[KEY_BUFSIZE]; /* Keyboard input buffer */ - char * connection; /* Connection Description */ + char keybuf[KEY_BUFSIZE]; /* Keyboard input buffer */ + + ushort node_connection; + char connection[LEN_MODEM+1]; /* Connection Description */ ulong cur_rate; /* Current Connection (DCE) Rate */ ulong cur_cps; /* Current Average Transfer CPS */ ulong dte_rate; /* Current COM Port (DTE) Rate */ @@ -291,6 +300,7 @@ public: long tos; /* Top of Screen */ long rows; /* Current number of Rows for User */ long cols; /* Current number of Columns for User */ + long column; /* Current column counter (for line counter) */ long autoterm; /* Autodetected terminal type */ char slbuf[SAVE_LINES][LINE_BUFSIZE+1]; /* Saved for redisplay */ char slatr[SAVE_LINES]; /* Starting attribute of each line */ @@ -327,7 +337,7 @@ public: char temp_uler[31]; /* User who uploaded the files to temp dir */ char temp_file[41]; /* Origin of extracted temp files */ long temp_cdt; /* Credit value of file that was extracted */ - char autohang; /* Used for auto-hangup after transfer */ + bool autohang; /* Used for auto-hangup after transfer */ size_t logcol; /* Current column of log file */ uint criterrs; /* Critical error counter */ @@ -363,18 +373,22 @@ public: /* Global command shell variables */ uint global_str_vars; char ** global_str_var; - long * global_str_var_name; + int32_t * global_str_var_name; uint global_int_vars; - long * global_int_var; - long * global_int_var_name; + int32_t * global_int_var; + int32_t * global_int_var_name; char * sysvar_p[MAX_SYSVARS]; uint sysvar_pi; - long sysvar_l[MAX_SYSVARS]; + int32_t sysvar_l[MAX_SYSVARS]; uint sysvar_li; /* ansi_term.cpp */ - char * ansi(int atr); /* Returns ansi escape sequence for atr */ - bool ansi_getxy(int* x, int* y); + const char* ansi(int atr); /* Returns ansi escape sequence for atr */ + char* ansi(int atr, int curatr, char* str); + bool ansi_gotoxy(int x, int y); + bool ansi_getxy(int* x, int* y); + bool ansi_save(void); + bool ansi_restore(void); void ansi_getlines(void); /* Command Shell Methods */ @@ -384,14 +398,14 @@ public: int exec_net(csi_t *csi); int exec_msg(csi_t *csi); int exec_file(csi_t *csi); - long exec_bin(const char *mod, csi_t *csi); + long exec_bin(const char *mod, csi_t *csi, const char* startup_dir=NULL); void clearvars(csi_t *bin); void freevars(csi_t *bin); - char** getstrvar(csi_t *bin, long name); - long* getintvar(csi_t *bin, long name); + char** getstrvar(csi_t *bin, int32_t name); + int32_t* getintvar(csi_t *bin, int32_t name); char* copystrvar(csi_t *csi, char *p, char *str); void skipto(csi_t *csi, uchar inst); - bool ftp_cmd(csi_t* csi, SOCKET ctrl_sock, char* cmdsrc, char* rsp); + bool ftp_cmd(csi_t* csi, SOCKET ctrl_sock, const char* cmdsrc, char* rsp); bool ftp_put(csi_t* csi, SOCKET ctrl_sock, char* src, char* dest); bool ftp_get(csi_t* csi, SOCKET ctrl_sock, char* src, char* dest, bool dir=false); SOCKET ftp_data_sock(csi_t* csi, SOCKET ctrl_sock, SOCKADDR_IN*); @@ -414,7 +428,7 @@ public: uint finduser(char *str); int sub_op(uint subnum); - ulong getlastmsg(uint subnum, ulong *ptr, time_t *t); + ulong getlastmsg(uint subnum, uint32_t *ptr, time_t *t); time_t getmsgtime(uint subnum, ulong ptr); ulong getmsgnum(uint subnum, time_t t); @@ -429,43 +443,45 @@ public: uint getusrgrp(uint subnum); uint userdatdupe(uint usernumber, uint offset, uint datlen, char *dat - ,bool del); - void gettimeleft(void); + ,bool del=false, bool next=false); + ulong gettimeleft(bool handle_out_of_time=true); bool gettimeleft_inside; /* str.cpp */ - char* timestr(time_t *intime); + char* timestr(time_t intime); char timestr_output[60]; void userlist(long mode); - size_t gettmplt(char *outstr, char *tmplt, long mode); + size_t gettmplt(char *outstr, const char *tmplt, long mode); void sif(char *fname, char *answers, long len); /* Synchronet Interface File */ void sof(char *fname, char *answers, long len); void create_sif_dat(char *siffile, char *datfile); void read_sif_dat(char *siffile, char *datfile); void printnodedat(uint number, node_t* node); + bool inputnstime32(time32_t *dt); bool inputnstime(time_t *dt); bool chkpass(char *pass, user_t* user, bool unique); - char * cmdstr(char *instr, char *fpath, char *fspec, char *outstr); + char * cmdstr(const char *instr, const char *fpath, const char *fspec, char *outstr); char cmdstr_output[512]; void subinfo(uint subnum); void dirinfo(uint dirnum); - bool trashcan(char *insearch, char *name); + bool trashcan(const char *insearch, const char *name); void time_bank(void); void change_user(void); /* writemsg.cpp */ void automsg(void); - bool writemsg(char *str, char *top, char *title, long mode, int subnum - ,char *dest); + bool writemsg(const char *str, const char *top, char *title, long mode, int subnum + ,const char *dest, char** editor=NULL); + char* quotes_fname(int xedit, char* buf, size_t len); char* msg_tmp_fname(int xedit, char* fname, size_t len); - char putmsg(char *str, long mode); + char putmsg(const char *str, long mode); bool msgabort(void); - bool email(int usernumber, char *top, char *title, long mode); + bool email(int usernumber, const char *top, const char *title, long mode); void forwardmail(smbmsg_t* msg, int usernum); void removeline(char *str, char *str2, char num, char skip); - ulong msgeditor(char *buf, char *top, char *title); - void editfile(char *path); + ulong msgeditor(char *buf, const char *top, char *title); + bool editfile(char *path); int loadmsg(smbmsg_t *msg, ulong number); ushort chmsgattr(ushort attr); void show_msgattr(ushort attr); @@ -474,10 +490,12 @@ public: void msgtotxt(smbmsg_t* msg, char *str, int header, int tails); void quotemsg(smbmsg_t* msg, int tails); void editmsg(smbmsg_t* msg, uint subnum); - void editor_inf(int xeditnum,char *dest, char *title, long mode + void editor_inf(int xeditnum, const char *dest, const char *title, long mode ,uint subnum); void copyfattach(uint to, uint from, char *title); bool movemsg(smbmsg_t* msg, uint subnum); + int process_edited_text(char* buf, FILE* stream, long mode, unsigned* lines); + int process_edited_file(const char* src, const char* dest, long mode, unsigned* lines); /* postmsg.cpp */ bool postmsg(uint subnum, smbmsg_t* msg, long wm_mode); @@ -485,10 +503,10 @@ public: /* mail.cpp */ int delmail(uint usernumber,int which); void telluser(smbmsg_t* msg); - void delallmail(uint usernumber); + void delallmail(uint usernumber, int which, bool permanent=true); /* getmsg.cpp */ - post_t* loadposts(long *posts, uint subnum, ulong ptr, long mode); + post_t* loadposts(int32_t *posts, uint subnum, ulong ptr, long mode); /* readmail.cpp */ void readmail(uint usernumber, int sent); @@ -498,10 +516,10 @@ public: int bulkmailhdr(smb_t*, smbmsg_t*, uint usernum); /* con_out.cpp */ - int bputs(char *str); /* BBS puts function */ - int rputs(char *str); /* BBS raw puts function */ - int bprintf(char *fmt, ...); /* BBS printf function */ - int rprintf(char *fmt, ...); /* BBS raw printf function */ + int bputs(const char *str); /* BBS puts function */ + int rputs(const char *str, size_t len=0); /* BBS raw puts function */ + int bprintf(const char *fmt, ...); /* BBS printf function */ + int rprintf(const char *fmt, ...); /* BBS raw printf function */ void backspace(void); /* Output a destructive backspace via outchar */ void outchar(char ch); /* Output a char - check echo and emu. */ void center(char *str); @@ -517,19 +535,19 @@ public: /* getstr.cpp */ size_t getstr_offset; size_t getstr(char *str, size_t length, long mode); - long getnum(ulong max); + long getnum(ulong max, ulong dflt=0); void insert_indicator(void); /* getkey.cpp */ char getkey(long mode); /* Waits for a key hit local or remote */ - long getkeys(char *str, ulong max); + long getkeys(const char *str, ulong max); void ungetkey(char ch); /* Places 'ch' into the input buffer */ - char question[128]; - bool yesno(char *str); - bool noyes(char *str); + char question[MAX_TEXTDAT_ITEM_LEN+1]; + bool yesno(const char *str); + bool noyes(const char *str); void pause(void); - char * mnestr; - void mnemonics(char *str); + const char * mnestr; + void mnemonics(const char *str); /* inkey.cpp */ char inkey(long mode, unsigned long timeout=0); @@ -540,7 +558,7 @@ public: void printtail(char *str, int lines, long mode); void menu(const char *code); - int uselect(int add, uint n, char *title, char *item, uchar *ar); + int uselect(int add, uint n, const char *title, const char *item, const uchar *ar); uint uselect_total, uselect_num[500]; void redrwstr(char *strin, int i, int l, long mode); @@ -548,8 +566,8 @@ public: void ctrl_a(char x); /* Peforms the Ctrl-Ax attribute changes */ /* atcodes.cpp */ - int show_atcode(char *code); - char* atcode(char* sp, char* str, size_t maxlen); + int show_atcode(const char *code); + const char* atcode(char* sp, char* str, size_t maxlen); /* getnode.cpp */ int getsmsg(int usernumber); @@ -566,23 +584,31 @@ public: int putnodedat(uint number, node_t * node); int putnodeext(uint number, char * str); - /* logonoff.cpp */ - bool answer(); + /* login.ccp */ int login(char *str, char *pw); + void badlogin(char* user, char* passwd); + + /* answer.cpp */ + bool answer(); + + /* logon.ccp */ bool logon(void); + + /* logout.cpp */ void logout(void); - void logoff(void); - BOOL newuser(void); /* Get new user */ void backout(void); + /* newuser.cpp */ + BOOL newuser(void); /* Get new user */ + /* text_sec.cpp */ int text_sec(void); /* Text sections */ /* readmsgs.cpp */ - int scanposts(uint subnum, long mode, char* find); /* Scan sub-board */ - long listsub(uint subnum, long mode, long start, char* search); + int scanposts(uint subnum, long mode, const char* find); /* Scan sub-board */ + long listsub(uint subnum, long mode, long start, const char* search); long listmsgs(uint subnum, long mode, post_t* post, long start, long posts); - long searchposts(uint subnum, post_t* post, long start, long msgs, char* find); + long searchposts(uint subnum, post_t* post, long start, long msgs, const char* find); long showposts_toyou(post_t* post, ulong start, long posts); void msghdr(smbmsg_t* msg); @@ -611,8 +637,8 @@ public: int nopen(char *str, int access); int mv(char *src, char *dest, char copy); /* fast file move/copy function */ bool chksyspass(void); - bool chk_ar(uchar * str, user_t * user); /* checks access requirements */ - bool ar_exp(uchar ** ptrptr, user_t * user); + bool chk_ar(const uchar * str, user_t* user, client_t* client); /* checks access requirements */ + bool ar_exp(const uchar ** ptrptr, user_t*, client_t*); void daily_maint(void); /* upload.cpp */ @@ -626,7 +652,7 @@ public: void downloadfile(file_t* f); void notdownloaded(ulong size, time_t start, time_t end); int protocol(prot_t* prot, enum XFER_TYPE, char *fpath, char *fspec, bool cd); - char* protcmdline(prot_t* prot, enum XFER_TYPE type); + const char* protcmdline(prot_t* prot, enum XFER_TYPE type); void seqwait(uint devnum); void autohangup(void); bool checkdszlog(file_t*); @@ -639,15 +665,16 @@ public: void openfile(file_t* f); void closefile(file_t* f); bool removefcdt(file_t* f); + bool removefile(file_t* f); bool movefile(file_t* f, int newdir); char * getfilespec(char *str); bool checkfname(char *fname); bool addtobatdl(file_t* f); /* listfile.cpp */ - bool listfile(char *fname, char *buf, uint dirnum - ,char *search, char letter, ulong datoffset); - int listfiles(uint dirnum, char *filespec, int tofile, long mode); + bool listfile(const char *fname, const char *buf, uint dirnum + ,const char *search, const char letter, ulong datoffset); + int listfiles(uint dirnum, const char *filespec, int tofile, long mode); int listfileinfo(uint dirnum, char *filespec, long mode); void listfiletofile(char *fname, char *buf, uint dirnum, int file); int batchflagprompt(uint dirnum, file_t bf[], uint total, long totalfiles); @@ -667,7 +694,7 @@ public: void temp_xfer(void); void extract(uint dirnum); char * temp_cmd(void); /* Returns temp file command line */ - ulong create_filelist(char *name, long mode); + ulong create_filelist(const char *name, long mode); /* viewfile.cpp */ int viewfile(file_t* f, int ext); @@ -690,18 +717,18 @@ public: void moduserdat(uint xtrnnum); /* logfile.cpp */ - void logentry(char *code,char *entry); + void logentry(const char *code,const char *entry); void log(char *str); /* Writes 'str' to node log */ void logch(char ch, bool comma); /* Writes 'ch' to node log */ - void logline(char *code,char *str); /* Writes 'str' on it's own line in log */ + void logline(const char *code,const char *str); /* Writes 'str' on it's own line in log (LOG_INFO level) */ + void logline(int level, const char *code,const char *str); void logofflist(void); /* List of users logon activity */ - bool syslog(char* code, char *entry); - void errorlog(char *text); /* Logs errors to ERROR.LOG and NODE.LOG */ - bool errorlog_inside; + bool syslog(const char* code, const char *entry); bool errormsg_inside; void errormsg(int line, const char *file, const char* action, const char *object ,ulong access, const char *extinfo=NULL); - + BOOL hacklog(char* prot, char* text); + /* qwk.cpp */ bool qwklogon; ulong qwkmail_last; @@ -724,21 +751,23 @@ public: /* un_rep.cpp */ bool unpack_rep(char* repfile=NULL); + uint resolve_qwkconf(uint n); /* msgtoqwk.cpp */ - ulong msgtoqwk(smbmsg_t* msg, FILE *qwk_fp, long mode, int subnum, int conf); + ulong msgtoqwk(smbmsg_t* msg, FILE *qwk_fp, long mode, int subnum, int conf, FILE* hdrs_dat); /* qwktomsg.cpp */ - bool qwktomsg(FILE *qwk_fp, char *hdrblk, char fromhub, uint subnum - ,uint touser); + void qwk_new_msg(smbmsg_t* msg, char* hdrblk, long offset, str_list_t headers, bool parse_sender_hfields); + bool qwk_import_msg(FILE *qwk_fp, char *hdrblk, ulong blocks, char fromhub, uint subnum + ,uint touser, smbmsg_t* msg); /* fido.cpp */ - bool netmail(char *into, char *subj, long mode); + bool netmail(const char *into, const char *subj, long mode); void qwktonetmail(FILE *rep, char *block, char *into, uchar fromhub); bool lookup_netuser(char *into); - bool inetmail(char *into, char *subj, long mode); - bool qnetmail(char *into, char *subj, long mode); + bool inetmail(const char *into, const char *subj, long mode); + bool qnetmail(const char *into, const char *subj, long mode); /* useredit.cpp */ void useredit(int usernumber); @@ -809,15 +838,16 @@ extern "C" { /* getmail.c */ DLLEXPORT int DLLCALL getmail(scfg_t* cfg, int usernumber, BOOL sent); - DLLEXPORT mail_t * DLLCALL loadmail(smb_t* smb, long* msgs, uint usernumber + DLLEXPORT mail_t * DLLCALL loadmail(smb_t* smb, int32_t* msgs, uint usernumber ,int which, long mode); DLLEXPORT void DLLCALL freemail(mail_t* mail); DLLEXPORT void DLLCALL delfattach(scfg_t*, smbmsg_t*); /* postmsg.cpp */ - DLLEXPORT int DLLCALL savemsg(scfg_t*, smb_t*, smbmsg_t*, client_t*, char* msgbuf); + DLLEXPORT int DLLCALL savemsg(scfg_t*, smb_t*, smbmsg_t*, client_t*, const char* server, char* msgbuf); DLLEXPORT void DLLCALL signal_sub_sem(scfg_t*, uint subnum); DLLEXPORT int DLLCALL msg_client_hfields(smbmsg_t*, client_t*); + DLLEXPORT char* DLLCALL msg_program_id(char* pid); /* filedat.c */ DLLEXPORT BOOL DLLCALL getfileixb(scfg_t* cfg, file_t* f); @@ -831,38 +861,47 @@ extern "C" { DLLEXPORT BOOL DLLCALL removefiledat(scfg_t* cfg, file_t* f); DLLEXPORT BOOL DLLCALL addfiledat(scfg_t* cfg, file_t* f); DLLEXPORT BOOL DLLCALL findfile(scfg_t* cfg, uint dirnum, char *filename); - DLLEXPORT char * DLLCALL padfname(char *filename, char *str); - DLLEXPORT char * DLLCALL unpadfname(char *filename, char *str); + DLLEXPORT char * DLLCALL padfname(const char *filename, char *str); + DLLEXPORT char * DLLCALL unpadfname(const char *filename, char *str); DLLEXPORT BOOL DLLCALL rmuserxfers(scfg_t* cfg, int fromuser, int destuser, char *fname); DLLEXPORT int DLLCALL update_uldate(scfg_t* cfg, file_t* f); /* str_util.c */ + DLLEXPORT char * DLLCALL remove_ctrl_a(const char* instr, char* outstr); + DLLEXPORT char DLLCALL ctrl_a_to_ascii_char(char code); DLLEXPORT char * DLLCALL truncstr(char* str, const char* set); DLLEXPORT char * DLLCALL ascii_str(uchar* str); - DLLEXPORT BOOL DLLCALL findstr(char *insearch, char *fname); - DLLEXPORT BOOL DLLCALL trashcan(scfg_t* cfg, char *insearch, char *name); - DLLEXPORT char * DLLCALL strip_exascii(char *str); - DLLEXPORT char * DLLCALL prep_file_desc(char *str); - DLLEXPORT char * DLLCALL strip_ctrl(char *str); + DLLEXPORT char DLLCALL exascii_to_ascii_char(uchar ch); + DLLEXPORT BOOL DLLCALL findstr(const char *insearch, const char *fname); + DLLEXPORT BOOL DLLCALL findstr_in_string(const char* insearchof, char* string); + DLLEXPORT BOOL DLLCALL findstr_in_list(const char* insearchof, str_list_t list); + DLLEXPORT BOOL DLLCALL trashcan(scfg_t* cfg, const char *insearch, const char *name); + DLLEXPORT char * DLLCALL trashcan_fname(scfg_t* cfg, const char *name, char* fname, size_t); + DLLEXPORT str_list_t DLLCALL trashcan_list(scfg_t* cfg, const char* name); + DLLEXPORT char * DLLCALL strip_exascii(const char *str, char* dest); + DLLEXPORT char * DLLCALL strip_space(const char *str, char* dest); + DLLEXPORT char * DLLCALL prep_file_desc(const char *str, char* dest); + DLLEXPORT char * DLLCALL strip_ctrl(const char *str, char* dest); DLLEXPORT char * DLLCALL net_addr(net_t* net); - DLLEXPORT BOOL DLLCALL validattr(char a); + DLLEXPORT BOOL DLLCALL valid_ctrl_a_attr(char a); + DLLEXPORT BOOL DLLCALL valid_ctrl_a_code(char a); DLLEXPORT size_t DLLCALL strip_invalid_attr(char *str); DLLEXPORT char * DLLCALL ultoac(ulong l,char *str); DLLEXPORT char * DLLCALL rot13(char* str); /* msg_id.c */ - DLLEXPORT char * DLLCALL ftn_msgid(sub_t* sub, smbmsg_t* msg); - DLLEXPORT char * DLLCALL get_msgid(scfg_t* cfg, uint subnum, smbmsg_t* msg); + DLLEXPORT char * DLLCALL ftn_msgid(sub_t* sub, smbmsg_t* msg, char* msgid, size_t); + DLLEXPORT char * DLLCALL get_msgid(scfg_t* cfg, uint subnum, smbmsg_t* msg, char* msgid, size_t); /* date_str.c */ DLLEXPORT char * DLLCALL zonestr(short zone); - DLLEXPORT time_t DLLCALL dstrtounix(scfg_t*, char *str); + DLLEXPORT time_t DLLCALL dstrtounix(scfg_t*, char *str); DLLEXPORT char * DLLCALL unixtodstr(scfg_t*, time_t, char *str); - DLLEXPORT char * DLLCALL sectostr(uint sec, char *str); + DLLEXPORT char * DLLCALL sectostr(uint sec, char *str); DLLEXPORT char * DLLCALL hhmmtostr(scfg_t* cfg, struct tm* tm, char* str); - DLLEXPORT char * DLLCALL timestr(scfg_t* cfg, time_t *intime, char* str); + DLLEXPORT char * DLLCALL timestr(scfg_t* cfg, time_t intime, char* str); DLLEXPORT when_t DLLCALL rfc822date(char* p); DLLEXPORT char * DLLCALL msgdate(when_t when, char* buf); @@ -884,18 +923,21 @@ extern "C" { DLLEXPORT BOOL DLLCALL fcompare(char* fn1, char* fn2); DLLEXPORT BOOL DLLCALL backup(char *org, int backup_level, BOOL ren); DLLEXPORT void DLLCALL refresh_cfg(scfg_t* cfg); - + /* scfglib1.c */ DLLEXPORT char * DLLCALL prep_dir(char* base, char* dir, size_t buflen); /* logfile.cpp */ - DLLEXPORT BOOL DLLCALL hacklog(scfg_t* cfg, char* prot, char* user, char* text + DLLEXPORT int DLLCALL errorlog(scfg_t* cfg, const char* host, const char* text); + + DLLEXPORT BOOL DLLCALL hacklog(scfg_t* cfg, char* prot, char* user, char* text ,char* host, SOCKADDR_IN* addr); DLLEXPORT BOOL DLLCALL spamlog(scfg_t* cfg, char* prot, char* action, char* reason ,char* host, char* ip_addr, char* to, char* from); - DLLEXPORT char * DLLCALL remove_ctrl_a(char* instr, char* outstr); + /* data.cpp */ + DLLEXPORT time_t DLLCALL getnextevent(scfg_t* cfg, event_t* event); /* data_ovl.cpp */ DLLEXPORT BOOL DLLCALL getmsgptrs(scfg_t* cfg, uint usernumber, subscan_t* subscan); @@ -936,16 +978,16 @@ extern "C" { typedef struct { char version[128]; const char* version_detail; - DWORD* interface_addr; - DWORD* options; - DWORD* clients; + uint32_t* interface_addr; + uint32_t* options; + uint32_t* clients; } js_server_props_t; enum { JSTYPE_ARRAY=JSTYPE_LIMIT ,JSTYPE_ALIAS ,JSTYPE_UNDEF -#if !defined(JSTYPE_NULL) /* JSTYPE_NULL was removed after 1.5 rc 6a (?) */ +#if JS_VERSION < JSVERSION_1_6 /* JSTYPE_NULL was removed after 1.5 rc 6a (?) */ ,JSTYPE_NULL #endif }; @@ -961,6 +1003,7 @@ extern "C" { DLLEXPORT JSBool DLLCALL js_DescribeSyncConstructor(JSContext* cx, JSObject* obj, const char*); DLLEXPORT JSBool DLLCALL js_DefineSyncMethods(JSContext* cx, JSObject* obj, jsSyncMethodSpec*, BOOL append); DLLEXPORT JSBool DLLCALL js_DefineSyncProperties(JSContext* cx, JSObject* obj, jsSyncPropertySpec*); + DLLEXPORT JSBool DLLCALL js_SyncResolve(JSContext* cx, JSObject* obj, char *name, jsSyncPropertySpec* props, jsSyncMethodSpec* funcs, jsConstIntSpec* consts, int flags); DLLEXPORT JSBool DLLCALL js_DefineConstIntegers(JSContext* cx, JSObject* obj, jsConstIntSpec*, int flags); DLLEXPORT JSBool DLLCALL js_CreateArrayOfStrings(JSContext* cx, JSObject* parent ,const char* name, char* str[], uintN flags); @@ -973,7 +1016,7 @@ extern "C" { ,js_server_props_t* props); /* js_global.c */ - DLLEXPORT JSObject* DLLCALL js_CreateGlobalObject(JSContext* cx, scfg_t* cfg, jsSyncMethodSpec* methods); + DLLEXPORT JSObject* DLLCALL js_CreateGlobalObject(JSContext* cx, scfg_t* cfg, jsSyncMethodSpec* methods, js_startup_t*); DLLEXPORT JSObject* DLLCALL js_CreateCommonObjects(JSContext* cx ,scfg_t* cfg /* common */ ,scfg_t* node_cfg /* node-specific */ @@ -981,16 +1024,18 @@ extern "C" { ,time_t uptime /* system */ ,char* host_name /* system */ ,char* socklib_desc /* system */ - ,js_branch_t* js_branch /* js */ + ,js_branch_t* /* js */ + ,js_startup_t* /* js */ ,client_t* client /* client */ ,SOCKET client_socket /* client */ ,js_server_props_t* props /* server */ ); /* js_internal.c */ - DLLEXPORT JSObject* DLLCALL js_CreateInternalJsObject(JSContext*, JSObject* parent, js_branch_t* branch); + DLLEXPORT JSObject* DLLCALL js_CreateInternalJsObject(JSContext*, JSObject* parent, js_branch_t*, js_startup_t*); DLLEXPORT JSBool DLLCALL js_CommonBranchCallback(JSContext*, js_branch_t*); DLLEXPORT void DLLCALL js_EvalOnExit(JSContext*, JSObject*, js_branch_t*); + DLLEXPORT void DLLCALL js_PrepareToExecute(JSContext*, JSObject*, const char *filename, const char* startup_dir); /* js_system.c */ DLLEXPORT JSObject* DLLCALL js_CreateSystemObject(JSContext* cx, JSObject* parent @@ -1004,23 +1049,23 @@ extern "C" { /* js_user.c */ DLLEXPORT JSObject* DLLCALL js_CreateUserClass(JSContext* cx, JSObject* parent, scfg_t* cfg); DLLEXPORT JSObject* DLLCALL js_CreateUserObject(JSContext* cx, JSObject* parent, scfg_t* cfg - ,char* name, uint usernumber); + ,char* name, user_t* user, client_t* client, BOOL global_user); DLLEXPORT JSBool DLLCALL js_CreateUserObjects(JSContext* cx, JSObject* parent, scfg_t* cfg - ,user_t* user, char* html_index_file + ,user_t* user, client_t* client, char* html_index_file ,subscan_t* subscan); /* js_file_area.c */ - DLLEXPORT JSObject* DLLCALL js_CreateFileAreaObject(JSContext* cx, JSObject* parent, scfg_t* cfg - ,user_t* user, char* html_index_file); + DLLEXPORT JSObject* DLLCALL js_CreateFileAreaObject(JSContext* cx, JSObject* parent, scfg_t* cfg + ,user_t* user, client_t* client, char* html_index_file); /* js_msg_area.c */ DLLEXPORT JSObject* DLLCALL js_CreateMsgAreaObject(JSContext* cx, JSObject* parent, scfg_t* cfg - ,user_t* user, subscan_t* subscan); + ,user_t* user, client_t* client, subscan_t* subscan); DLLEXPORT BOOL DLLCALL js_CreateMsgAreaProperties(JSContext* cx, scfg_t* cfg ,JSObject* subobj, uint subnum); /* js_xtrn_area.c */ DLLEXPORT JSObject* DLLCALL js_CreateXtrnAreaObject(JSContext* cx, JSObject* parent, scfg_t* cfg - ,user_t* user); + ,user_t* user, client_t* client); /* js_msgbase.c */ DLLEXPORT JSObject* DLLCALL js_CreateMsgBaseClass(JSContext* cx, JSObject* parent, scfg_t* cfg); @@ -1055,16 +1100,23 @@ extern "C" { /* js_uifc.c */ JSObject* js_CreateUifcObject(JSContext* cx, JSObject* parent); + /* js_conio.c */ + JSObject* js_CreateConioObject(JSContext* cx, JSObject* parent); + + /* js_com.c */ + DLLEXPORT JSObject* DLLCALL js_CreateCOMClass(JSContext* cx, JSObject* parent); + DLLEXPORT JSObject* DLLCALL js_CreateCOMObject(JSContext* cx, JSObject* parent, const char *name, COM_HANDLE sock); + #endif /* str_util.c */ -int bstrlen(char *str); -void backslashcolon(char *str); -ulong ahtoul(char *str); /* Converts ASCII hex to ulong */ +size_t bstrlen(const char *str); +char* backslashcolon(char *str); +ulong ahtoul(const char *str); /* Converts ASCII hex to ulong */ char * hexplus(uint num, char *str); /* Hex plus for 3 digits up to 9000 */ -uint hptoi(char *str); -int pstrcmp(char **str1, char **str2); /* Compares pointers to pointers */ -int strsame(char *str1, char *str2); /* Compares number of same chars */ +uint hptoi(const char *str); +int pstrcmp(const char **str1, const char **str2); /* Compares pointers to pointers */ +int strsame(const char *str1, const char *str2); /* Compares number of same chars */ /* load_cfg.c */ BOOL md(char *path); @@ -1072,19 +1124,19 @@ BOOL md(char *path); #ifdef SBBS /* These aren't exported */ /* main.c */ - int lputs(int level, char *); /* log output */ - int lprintf(int level, char *fmt, ...); /* log output */ - int eprintf(int level, char *fmt, ...); /* event log */ + int lputs(int level, const char *); /* log output */ + int lprintf(int level, const char *fmt, ...); /* log output */ + int eprintf(int level, const char *fmt, ...); /* event log */ SOCKET open_socket(int type, const char* protocol); SOCKET accept_socket(SOCKET s, SOCKADDR* addr, socklen_t* addrlen); int close_socket(SOCKET); u_long resolve_ip(char *addr); - char * readtext(long *line, FILE *stream); + char * readtext(long *line, FILE *stream, long dflt); /* ver.cpp */ char* socklib_version(char* str, char* winsock_ver); - + /* sortdir.cpp */ int fnamecmp_a(char **str1, char **str2); /* for use with resort() */ int fnamecmp_d(char **str1, char **str2); @@ -1092,7 +1144,7 @@ BOOL md(char *path); int fdatecmp_d(uchar **buf1, uchar **buf2); /* file.cpp */ - BOOL filematch(char *filename, char *filespec); + BOOL filematch(const char *filename, const char *filespec); /* sbbscon.c */ #if defined(__unix__) && defined(NEEDS_DAEMON)