#ifndef _napster_h #define _napster_h #include "modval.h" typedef struct _Stats { int libraries; int gigs; int songs; unsigned long total_files; double total_filesize; unsigned long files_served; double filesize_served; unsigned long files_received; double filesize_received; double max_downloadspeed; double max_uploadspeed; time_t starttime; unsigned long shared_files; double shared_filesize; } Stats; extern Stats statistics; typedef struct { char *username; char *password; int connection_speed; } _N_AUTH; typedef unsigned char _N_CMD; typedef struct { int libraries; int gigs; int songs; } _N_STATS; #define cparse convert_output_format typedef struct _nick_struct { struct _nick_struct *next; char *nick; int speed; unsigned long shared; } NickStruct; typedef struct _AUDIO_HEADER { unsigned long filesize; int mpeg25; int ID; int layer; int error_protection; int bitrate_index; int sampling_frequency; int padding; int extension; int mode; /* 0 = STEREO 1 = Joint 2 = DUAL 3 = Mono */ int mode_ext; int copyright; int original; int emphasis; int stereo; int jsbound; int sblimit; int true_layer; int framesize; int freq; unsigned long totalframes; unsigned long bitrate; } AUDIO_HEADER; typedef struct _files { struct _files *next; char *filename; char *checksum; unsigned long filesize; time_t time; int bitrate; int freq; int stereo; int type; } Files; typedef struct _ignore_nick_struct { struct _ignore_nick_struct *next; char *nick; unsigned long start; unsigned long end; } IgnoreStruct; typedef struct _channel_struct { struct _channel_struct *next; char *channel; char *topic; int injoin; NickStruct *nicks; } ChannelStruct; typedef struct _file_struct { struct _file_struct *next; char *name; char *checksum; unsigned long filesize; unsigned int bitrate; unsigned int freq; unsigned int seconds; char *nick; unsigned long ip; int port; unsigned short speed; } FileStruct; typedef struct _getfile_ { struct _getfile_ *next; char *nick; char *ip; char *checksum; char *filename; char *realfile; int socket; int port; int write; int count; unsigned long filesize; unsigned long received; unsigned long resume; time_t starttime; time_t addtime; int speed; int up; } GetFile; typedef struct _resume_file_ { struct _resume_file_ *next; char *checksum; unsigned long filesize; char *filename; FileStruct *results; } ResumeFile; enum nap_Commands { CMDR_ERROR = 0, CMDS_UNKNOWN = 1, CMDS_LOGIN = 2, /* user pass dataport "version" speed */ CMDR_EMAILADDR = 3, /* email address */ CMDR_BASTARD = 4, /* unknown */ CMDS_REGISTERINFO = 6, /* userinfo */ CMDS_CREATEUSER = 7, /* create user account */ CMDR_CREATED = 8, /* account created */ CMDR_CREATEERROR = 9, /* username taken */ CMDR_ILLEGALNICK = 10, /* illegal nickname specified */ CMDR_LOGINERROR = 13, CMDS_OPTIONS = 14, /* NAME:%s ADDRESS:%s CITY:%s STATE:%s PHONE:%s AGE:%s INCOME:%s EDUCATION:%s *login options */ CMDR_MSTAT = 15, CMDR_REQUESTUSERSPEED = 89, CMDR_SENDFILE = 95, CMDS_ADDFILE = 100, CMDS_REMOVEFILE = 102, /* "\path\to\filename\" for removal */ CMDR_GETQUEUE = 108, CMDR_MOTD = 109, CMDR_ANOTHERUSER = 148, CMDS_SEARCH = 200, CMDR_SEARCHRESULTS = 201, CMDR_SEARCHRESULTSEND = 202, /* if dataport is 0 we use 500 to request a transfer. 0 is a firewalled host */ CMDS_REQUESTFILE = 203, CMDR_FILEREADY = 204, CMDS_SENDMSG = 205, CMDR_GETERROR = 206, CMDS_ADDHOTLIST = 207, CMDS_ADDHOTLISTSEQ = 208, CMDR_HOTLISTONLINE = 209, CMDR_USEROFFLINE = 210, CMDS_BROWSE = 211, CMDR_BROWSERESULT = 212, CMDR_BROWSEENDRESULT = 213, CMDR_STATS = 214, CMDS_REQUESTRESUME = 215, /* checksum filesize */ CMDR_RESUMESUCCESS = 216, /* nick ip port filename checksum size connection */ CMDR_RESUMEEND = 217, /* end resume for checksum filesize */ CMDS_UPDATE_GET1 = 218, /* add 1 to download */ CMDS_UPDATE_GET = 219, /* sub 1 from download */ CMDS_UPDATE_SEND1 = 220, /* add 1 for send */ CMDS_UPDATE_SEND = 221, /* sub 1 from send */ CMDR_HOTLISTSUCCESS = 301, CMDR_HOTLISTERROR = 302, /* not on hotlist */ CMDS_HOTLISTREMOVE = 303, /* nick */ CMDS_JOIN = 400, CMDS_PART = 401, CMDS_SEND = 402, CMDR_PUBLIC = 403, CMDR_ERRORMSG = 404, CMDR_JOIN = 405, CMDR_JOINNEW = 406, CMDR_PARTED = 407, CMDR_NAMES = 408, CMDR_ENDNAMES = 409, CMDS_TOPIC = 410, /* got/change topic */ CMDS_REQUESTFILEFIRE = 500, CMDR_FILEINFOFIRE = 501, /* if firewalled then expect a 501 request send */ CMDS_REQUESTINFO = 600, CMDS_FILESIZE = 601, CMDS_REQUESTSIZE = 602, CMDS_WHOIS = 603, CMDR_WHOIS = 604, CMDR_WHOWAS = 605, CMDS_SETUSERLEVEL = 606, /* moderators/administrators/elite */ CMDR_FILEREQUEST = 607, /* nick \"filename\" */ CMDS_FILEINFO = 608, /* nick \"filename\" */ CMDR_ACCEPTERROR = 609, /* accept failed on request */ CMDS_KILLUSER = 610, /* return 404 permission denied */ CMDS_NUKEUSER = 611, /* return 404 */ CMDS_BANUSER = 612, CMDS_SETDATAPORT = 613, CMDS_UNBANUSER = 614, CMDS_BANLIST = 615, CMDR_BANLIST_IP = 616, CMDS_LISTCHANNELS = 617, CMDR_LISTCHANNELS = 618, CMDS_SENDLIMIT = 619, /* nick "filename" queuelimit */ CMDR_SENDLIMIT = 620, /* nick "filename" filesize queuelimit */ CMDR_MOTDS = 621, CMDS_MUZZLE = 622, CMDS_UNMUZZLE = 623, CMDS_UNNUKEUSER = 624, /* return 404 */ CMDS_SETLINESPEED = 625, CMDR_DATAPORTERROR = 626, CMDS_OPSAY = 627, CMDS_ANNOUNCE = 628, CMDR_BANLIST_NICK = 629, CMDS_CHANGESPEED = 700, CMDS_CHANGEPASS = 701, CMDS_CHANGEEMAIL = 702, CMDS_CHANGEDATA = 703, CMDS_PING = 751, /* user */ CMDS_PONG = 752, /* received from a ping*/ /* can also be used to send a pong */ /* 753 */ CMDS_RELOADCONFIG = 800, /* */ CMDS_SERVERVERSION = 801, /* none */ /* 802 missing */ CMDS_SETCONFIG = 810, /* returns 825 with nick info, 830 is received on end of list */ /* 831 */ /* the following are open-nap specific */ CMDS_SERVERLINK = 10100, /* link server [] */ CMDS_SERVERUNLINK = 10101, /* unlink server */ CMDS_SERVERKILL = 10110, /* kill server */ CMDS_SERVERREMOVE = 10111, /* remove it */ CMDS_ADDMIMEFILE = 10300 /* add a mime file type */ #if 0 %s %s "%s" Proper Syntax: /setpassword [reason] SETPASSWORD #endif }; /* 500 nick filename -> "501 nick ip port filename md5 speed" */ typedef struct { unsigned short len; unsigned short command; } _N_DATA; typedef struct { int cmd; int (*func)(int, char *); } _NAP_COMMANDS; #define NAP_COMM(name) \ int name (int cmd, char *args) NAP_COMM(cmd_error); NAP_COMM(cmd_unknown); NAP_COMM(cmd_login); NAP_COMM(cmd_email); NAP_COMM(cmd_stats); NAP_COMM(cmd_whois); NAP_COMM(cmd_whowas); NAP_COMM(cmd_joined); NAP_COMM(cmd_topic); NAP_COMM(cmd_names); NAP_COMM(cmd_endnames); NAP_COMM(cmd_parted); NAP_COMM(cmd_public); NAP_COMM(cmd_msg); NAP_COMM(cmd_search); NAP_COMM(cmd_endsearch); NAP_COMM(cmd_browse); NAP_COMM(cmd_endbrowse); NAP_COMM(cmd_request); NAP_COMM(cmd_getfile); NAP_COMM(cmd_getfileinfo); NAP_COMM(cmd_alreadyregistered); NAP_COMM(cmd_registerinfo); NAP_COMM(cmd_banlist); NAP_COMM(cmd_offline); NAP_COMM(cmd_filerequest); NAP_COMM(cmd_dataport); NAP_COMM(cmd_hotlist); NAP_COMM(cmd_fileinfo); NAP_COMM(cmd_hotlistsuccess); NAP_COMM(cmd_hotlisterror); NAP_COMM(cmd_channellist); NAP_COMM(cmd_resumerequest); NAP_COMM(cmd_resumerequestend); NAP_COMM(cmd_send_limit_msg); NAP_COMM(cmd_accepterror); NAP_COMM(cmd_recname); NAP_COMM(cmd_endname); NAP_COMM(cmd_firewall_request); NAP_COMM(cmd_ping); NAP_COMM(cmd_bastard); NAP_COMM(cmd_sendme); BUILT_IN_DLL(load_napserv); BUILT_IN_DLL(print_napster); BUILT_IN_DLL(share_napster); BUILT_IN_DLL(nclose); BUILT_IN_DLL(nap_del); BUILT_IN_DLL(nap_glist); BUILT_IN_DLL(nap_request); BUILT_IN_DLL(ignore_user); BUILT_IN_DLL(nap_echo); #define NAP_send(s, i) write(nap_socket, s, i); SocketList *naplink_connect(char *, unsigned short); void naplink_getserver(char *, unsigned short, int); int nap_say(char *, ...); int nap_put(char *, ...); int send_ncommand(unsigned int, char *, ...); void print_file(FileStruct *, int); void naplink_handlelink(int); int make_listen(int); void set_napster_socket(int); char *napster_status(void); int build_napster_status(Window *); int nap_finished_file(int, GetFile *); int clean_queue(GetFile **, int); void clear_filelist(FileStruct **); void clear_files(Files **); void nap_firewall_get(int); char *mp3_time(unsigned long); char *calc_md5(int, unsigned long); int check_nignore(char *); #if 0 #undef BUILT_IN_FUNCTION #define BUILT_IN_FUNCTION(x, y) static char * x (char *fn, char * y) #endif BUILT_IN_FUNCTION(func_mp3_time); BUILT_IN_FUNCTION(func_topic); BUILT_IN_FUNCTION(func_onchan); BUILT_IN_FUNCTION(func_onchannel); BUILT_IN_FUNCTION(func_connected); BUILT_IN_FUNCTION(func_hotlist); BUILT_IN_FUNCTION(func_napchannel); BUILT_IN_FUNCTION(func_raw); BUILT_IN_FUNCTION(func_md5); GetFile *find_in_getfile(GetFile **, int, char *, char *, char *, int, int); int connectbynumber(char *, unsigned short *, int, int, int); int count_download(char *); void compute_soundex (char *, int, const char *); char *base_name(char *); extern FileStruct *file_search; extern FileStruct *file_browse; extern GetFile *napster_sendqueue; extern char *nap_current_channel; extern int nap_socket; extern ChannelStruct *nchannels; extern NickStruct *nap_hotlist; #define NAP_DOWNLOAD 0x00 #define NAP_UPLOAD 0x01 #define NAP_QUEUED 0xf0 #define NAP_BUFFER_SIZE 2048 #endif