Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
BitchX
GitHub Repository: BitchX/BitchX1.3
Path: blob/master/dll/nap/napster.h
1072 views
1
2
#ifndef _napster_h
3
#define _napster_h
4
5
#include "modval.h"
6
7
typedef struct _Stats {
8
int libraries;
9
int gigs;
10
int songs;
11
unsigned long total_files;
12
double total_filesize;
13
unsigned long files_served;
14
double filesize_served;
15
unsigned long files_received;
16
double filesize_received;
17
double max_downloadspeed;
18
double max_uploadspeed;
19
time_t starttime;
20
unsigned long shared_files;
21
double shared_filesize;
22
} Stats;
23
24
extern Stats statistics;
25
26
typedef struct {
27
char *username;
28
char *password;
29
int connection_speed;
30
} _N_AUTH;
31
32
typedef unsigned char _N_CMD;
33
34
typedef struct {
35
int libraries;
36
int gigs;
37
int songs;
38
} _N_STATS;
39
40
#define cparse convert_output_format
41
42
typedef struct _nick_struct {
43
struct _nick_struct *next;
44
char *nick;
45
int speed;
46
unsigned long shared;
47
} NickStruct;
48
49
typedef struct _AUDIO_HEADER {
50
unsigned long filesize;
51
int mpeg25;
52
int ID;
53
int layer;
54
int error_protection;
55
int bitrate_index;
56
int sampling_frequency;
57
int padding;
58
int extension;
59
int mode; /* 0 = STEREO 1 = Joint 2 = DUAL 3 = Mono */
60
int mode_ext;
61
int copyright;
62
int original;
63
int emphasis;
64
int stereo;
65
int jsbound;
66
int sblimit;
67
int true_layer;
68
int framesize;
69
int freq;
70
unsigned long totalframes;
71
unsigned long bitrate;
72
} AUDIO_HEADER;
73
74
typedef struct _files {
75
struct _files *next;
76
char *filename;
77
char *checksum;
78
unsigned long filesize;
79
time_t time;
80
int bitrate;
81
int freq;
82
int stereo;
83
int type;
84
} Files;
85
86
typedef struct _ignore_nick_struct {
87
struct _ignore_nick_struct *next;
88
char *nick;
89
unsigned long start;
90
unsigned long end;
91
} IgnoreStruct;
92
93
typedef struct _channel_struct {
94
struct _channel_struct *next;
95
char *channel;
96
char *topic;
97
int injoin;
98
NickStruct *nicks;
99
} ChannelStruct;
100
101
typedef struct _file_struct {
102
struct _file_struct *next;
103
char *name;
104
char *checksum;
105
unsigned long filesize;
106
unsigned int bitrate;
107
unsigned int freq;
108
unsigned int seconds;
109
char *nick;
110
unsigned long ip;
111
int port;
112
unsigned short speed;
113
} FileStruct;
114
115
typedef struct _getfile_ {
116
struct _getfile_ *next;
117
118
char *nick;
119
char *ip;
120
char *checksum;
121
char *filename;
122
char *realfile;
123
124
int socket;
125
int port;
126
int write;
127
int count;
128
unsigned long filesize;
129
unsigned long received;
130
unsigned long resume;
131
time_t starttime;
132
time_t addtime;
133
int speed;
134
int up;
135
} GetFile;
136
137
typedef struct _resume_file_ {
138
struct _resume_file_ *next;
139
char *checksum;
140
unsigned long filesize;
141
char *filename;
142
FileStruct *results;
143
} ResumeFile;
144
145
enum nap_Commands {
146
CMDR_ERROR = 0,
147
CMDS_UNKNOWN = 1,
148
CMDS_LOGIN = 2, /* user pass dataport "version" speed */
149
CMDR_EMAILADDR = 3, /* email address */
150
CMDR_BASTARD = 4, /* unknown */
151
CMDS_REGISTERINFO = 6, /* userinfo */
152
CMDS_CREATEUSER = 7, /* create user account */
153
CMDR_CREATED = 8, /* account created */
154
CMDR_CREATEERROR = 9, /* username taken */
155
CMDR_ILLEGALNICK = 10, /* illegal nickname specified */
156
157
CMDR_LOGINERROR = 13,
158
159
CMDS_OPTIONS = 14, /* NAME:%s ADDRESS:%s CITY:%s STATE:%s PHONE:%s AGE:%s INCOME:%s EDUCATION:%s *login options */
160
161
CMDR_MSTAT = 15,
162
CMDR_REQUESTUSERSPEED = 89,
163
CMDR_SENDFILE = 95,
164
CMDS_ADDFILE = 100,
165
166
CMDS_REMOVEFILE = 102, /* "\path\to\filename\" for removal */
167
168
CMDR_GETQUEUE = 108,
169
CMDR_MOTD = 109,
170
CMDR_ANOTHERUSER = 148,
171
CMDS_SEARCH = 200,
172
CMDR_SEARCHRESULTS = 201,
173
CMDR_SEARCHRESULTSEND = 202,
174
175
/* if dataport is 0 we use 500 to request a transfer. 0 is a firewalled host */
176
CMDS_REQUESTFILE = 203,
177
CMDR_FILEREADY = 204,
178
179
CMDS_SENDMSG = 205,
180
CMDR_GETERROR = 206,
181
182
CMDS_ADDHOTLIST = 207,
183
184
CMDS_ADDHOTLISTSEQ = 208,
185
CMDR_HOTLISTONLINE = 209,
186
CMDR_USEROFFLINE = 210,
187
188
CMDS_BROWSE = 211,
189
CMDR_BROWSERESULT = 212,
190
CMDR_BROWSEENDRESULT = 213,
191
CMDR_STATS = 214,
192
193
CMDS_REQUESTRESUME = 215, /* checksum filesize */
194
CMDR_RESUMESUCCESS = 216, /* nick ip port filename checksum size connection */
195
CMDR_RESUMEEND = 217, /* end resume for checksum filesize */
196
197
CMDS_UPDATE_GET1 = 218, /* add 1 to download */
198
CMDS_UPDATE_GET = 219, /* sub 1 from download */
199
CMDS_UPDATE_SEND1 = 220, /* add 1 for send */
200
CMDS_UPDATE_SEND = 221, /* sub 1 from send */
201
202
CMDR_HOTLISTSUCCESS = 301,
203
CMDR_HOTLISTERROR = 302, /* not on hotlist */
204
CMDS_HOTLISTREMOVE = 303, /* nick */
205
206
CMDS_JOIN = 400,
207
CMDS_PART = 401,
208
CMDS_SEND = 402,
209
CMDR_PUBLIC = 403,
210
CMDR_ERRORMSG = 404,
211
CMDR_JOIN = 405,
212
CMDR_JOINNEW = 406,
213
CMDR_PARTED = 407,
214
CMDR_NAMES = 408,
215
CMDR_ENDNAMES = 409,
216
CMDS_TOPIC = 410, /* got/change topic */
217
218
CMDS_REQUESTFILEFIRE = 500,
219
CMDR_FILEINFOFIRE = 501, /* if firewalled then expect a 501 request send */
220
221
CMDS_REQUESTINFO = 600,
222
CMDS_FILESIZE = 601,
223
CMDS_REQUESTSIZE = 602,
224
CMDS_WHOIS = 603,
225
CMDR_WHOIS = 604,
226
CMDR_WHOWAS = 605,
227
CMDS_SETUSERLEVEL = 606, /* moderators/administrators/elite */
228
CMDR_FILEREQUEST = 607, /* nick \"filename\" */
229
CMDS_FILEINFO = 608, /* nick \"filename\" */
230
CMDR_ACCEPTERROR = 609, /* accept failed on request */
231
232
CMDS_KILLUSER = 610, /* return 404 permission denied */
233
CMDS_NUKEUSER = 611, /* return 404 */
234
CMDS_BANUSER = 612,
235
CMDS_SETDATAPORT = 613,
236
CMDS_UNBANUSER = 614,
237
CMDS_BANLIST = 615,
238
CMDR_BANLIST_IP = 616,
239
CMDS_LISTCHANNELS = 617,
240
CMDR_LISTCHANNELS = 618,
241
242
CMDS_SENDLIMIT = 619, /* nick "filename" queuelimit */
243
CMDR_SENDLIMIT = 620, /* nick "filename" filesize queuelimit */
244
245
CMDR_MOTDS = 621,
246
CMDS_MUZZLE = 622,
247
CMDS_UNMUZZLE = 623,
248
CMDS_UNNUKEUSER = 624, /* return 404 */
249
CMDS_SETLINESPEED = 625,
250
CMDR_DATAPORTERROR = 626,
251
CMDS_OPSAY = 627,
252
CMDS_ANNOUNCE = 628,
253
CMDR_BANLIST_NICK = 629,
254
255
CMDS_CHANGESPEED = 700,
256
CMDS_CHANGEPASS = 701,
257
CMDS_CHANGEEMAIL = 702,
258
CMDS_CHANGEDATA = 703,
259
260
CMDS_PING = 751, /* user */
261
CMDS_PONG = 752, /* <user> recieved from a ping*/
262
/* <user> can also be used to send a pong */
263
/* 753 */
264
265
CMDS_RELOADCONFIG = 800, /* <config variable> */
266
CMDS_SERVERVERSION = 801, /* none */
267
/* 802 missing */
268
CMDS_SETCONFIG = 810, /* <config string */
269
/* 811 */
270
CMDS_CLEARCHANNEL = 820, /* channelname */
271
/* 821 822 823 826 827 */
272
CMDS_SENDME = 824,
273
CMDR_NICK = 825,
274
CMDS_NAME = 830, /* <channel> returns 825 with nick info, 830 is recieved on end of list */
275
/* 831 */
276
277
278
/* the following are open-nap specific */
279
CMDS_SERVERLINK = 10100, /* link server <server> <port> [<remote server>] */
280
CMDS_SERVERUNLINK = 10101, /* unlink server <server> <reason> */
281
CMDS_SERVERKILL = 10110, /* kill server <server> <reason> */
282
CMDS_SERVERREMOVE = 10111, /* remove it <server> <reason> */
283
CMDS_ADDMIMEFILE = 10300 /* add a mime file type */
284
#if 0
285
%s %s "%s"
286
Proper Syntax: /setpassword <user> <password> [reason]
287
SETPASSWORD
288
#endif
289
};
290
291
/*
292
500 nick filename -> "501 nick ip port filename md5 speed"
293
*/
294
295
296
typedef struct {
297
unsigned short len;
298
unsigned short command;
299
} _N_DATA;
300
301
typedef struct {
302
int cmd;
303
int (*func)(int, char *);
304
} _NAP_COMMANDS;
305
306
#define NAP_COMM(name) \
307
int name (int cmd, char *args)
308
309
NAP_COMM(cmd_error);
310
NAP_COMM(cmd_unknown);
311
NAP_COMM(cmd_login);
312
NAP_COMM(cmd_email);
313
NAP_COMM(cmd_stats);
314
NAP_COMM(cmd_whois);
315
NAP_COMM(cmd_whowas);
316
NAP_COMM(cmd_joined);
317
NAP_COMM(cmd_topic);
318
NAP_COMM(cmd_names);
319
NAP_COMM(cmd_endnames);
320
NAP_COMM(cmd_parted);
321
NAP_COMM(cmd_public);
322
NAP_COMM(cmd_msg);
323
NAP_COMM(cmd_search);
324
NAP_COMM(cmd_endsearch);
325
NAP_COMM(cmd_browse);
326
NAP_COMM(cmd_endbrowse);
327
NAP_COMM(cmd_request);
328
NAP_COMM(cmd_getfile);
329
NAP_COMM(cmd_getfileinfo);
330
NAP_COMM(cmd_alreadyregistered);
331
NAP_COMM(cmd_registerinfo);
332
NAP_COMM(cmd_banlist);
333
NAP_COMM(cmd_offline);
334
NAP_COMM(cmd_filerequest);
335
NAP_COMM(cmd_dataport);
336
NAP_COMM(cmd_hotlist);
337
NAP_COMM(cmd_fileinfo);
338
NAP_COMM(cmd_hotlistsuccess);
339
NAP_COMM(cmd_hotlisterror);
340
NAP_COMM(cmd_channellist);
341
NAP_COMM(cmd_resumerequest);
342
NAP_COMM(cmd_resumerequestend);
343
NAP_COMM(cmd_send_limit_msg);
344
NAP_COMM(cmd_accepterror);
345
346
NAP_COMM(cmd_recname);
347
NAP_COMM(cmd_endname);
348
NAP_COMM(cmd_firewall_request);
349
NAP_COMM(cmd_ping);
350
NAP_COMM(cmd_bastard);
351
NAP_COMM(cmd_sendme);
352
353
BUILT_IN_DLL(load_napserv);
354
BUILT_IN_DLL(print_napster);
355
BUILT_IN_DLL(share_napster);
356
BUILT_IN_DLL(nclose);
357
BUILT_IN_DLL(nap_del);
358
BUILT_IN_DLL(nap_glist);
359
BUILT_IN_DLL(nap_request);
360
BUILT_IN_DLL(ignore_user);
361
BUILT_IN_DLL(nap_echo);
362
363
#define NAP_send(s, i) write(nap_socket, s, i);
364
SocketList *naplink_connect(char *, unsigned short);
365
void naplink_getserver(char *, unsigned short, int);
366
367
int nap_say(char *, ...);
368
int nap_put(char *, ...);
369
int send_ncommand(unsigned int, char *, ...);
370
371
372
void print_file(FileStruct *, int);
373
void naplink_handlelink(int);
374
int make_listen(int);
375
void set_napster_socket(int);
376
char *napster_status(void);
377
int build_napster_status(Window *);
378
int nap_finished_file(int, GetFile *);
379
int clean_queue(GetFile **, int);
380
void clear_filelist(FileStruct **);
381
void clear_files(Files **);
382
void nap_firewall_get(int);
383
char *mp3_time(unsigned long);
384
char *calc_md5(int, unsigned long);
385
int check_nignore(char *);
386
387
#if 0
388
#undef BUILT_IN_FUNCTION
389
#define BUILT_IN_FUNCTION(x, y) static char * x (char *fn, char * y)
390
#endif
391
392
BUILT_IN_FUNCTION(func_mp3_time);
393
BUILT_IN_FUNCTION(func_topic);
394
BUILT_IN_FUNCTION(func_onchan);
395
BUILT_IN_FUNCTION(func_onchannel);
396
BUILT_IN_FUNCTION(func_connected);
397
BUILT_IN_FUNCTION(func_hotlist);
398
BUILT_IN_FUNCTION(func_napchannel);
399
BUILT_IN_FUNCTION(func_raw);
400
BUILT_IN_FUNCTION(func_md5);
401
402
GetFile *find_in_getfile(GetFile **, int, char *, char *, char *, int, int);
403
int connectbynumber(char *, unsigned short *, int, int, int);
404
405
int count_download(char *);
406
void compute_soundex (char *, int, const char *);
407
408
char *base_name(char *);
409
410
extern FileStruct *file_search;
411
extern FileStruct *file_browse;
412
extern GetFile *napster_sendqueue;
413
extern char *nap_current_channel;
414
extern int nap_socket;
415
extern ChannelStruct *nchannels;
416
extern NickStruct *nap_hotlist;
417
418
419
#define NAP_DOWNLOAD 0x00
420
#define NAP_UPLOAD 0x01
421
#define NAP_QUEUED 0xf0
422
#define NAP_BUFFER_SIZE 2048
423
424
#endif
425
426