/* copyright 2002 Alexander Malmberg */ #include #include #include #include #include #include #include #include "MsgDB.h" #include "NNTPSource.h" #include "GUISource.h" #include "NNTPSourceGUI.h" #include "NNTPServer.h" typedef struct nntpsource_group_s group_t; @implementation NNTPSource (private) -(void) recreateNNTPServer { const char *host,*sport; host=[mdb msg_getMetaHeader: "Host" : mmid]; sport=[mdb msg_getMetaHeader: "Port" : mmid]; if (cur_host && !strcmp(host,cur_host) && (sport==cur_sport || !strcmp(sport,cur_sport))) return; if (cur_host) free(cur_host); if (host) { cur_host=strdup(host); if (!cur_host) abort(); /* TODO */ } else cur_host=NULL; if (cur_sport) free(cur_sport); if (sport) { cur_sport=strdup(sport); if (!cur_sport) abort(); /* TODO */ } else cur_sport=NULL; if (server) { [server enableConnect: 0]; [server closeAllConnections]; DESTROY(server); } if (host) { if (sport && atoi(sport)>0 && atoi(sport)<65536) server=[[NNTPServer alloc] initWithHost: host port: atoi(sport)]; else server=[[NNTPServer alloc] initWithHost: host]; [server setReceiver: self]; [server enableConnect: 1]; } } -(void) syncGroupHeaders: (int)gnum { char buf1[32],buf2[32]; snprintf(buf1,sizeof(buf1),"G%i-num",gnum); snprintf(buf2,sizeof(buf2),"%i",groups[gnum].last_num); [mdb msg_setMetaHeader: buf1 value: buf2 : mmid]; } -(void) syncAllGroupHeaders { int i; char buf1[32],buf2[32]; for (i=0;i=first) first=groups[i].last_num+1; [[mdb notificationCenter] postNotificationName: MsgDB_LogMessageNotification object: mdb userInfo: [NSDictionary dictionaryWithObject: [NSString stringWithFormat: _(@"%i new messages in '%s', retrieving headers..."), last-first+1,[NNTPServer getGroupName: groups[i].idx]] forKey: @"Message"]]; // printf("requesting headers for %i-%i=%i\n",first,last,last-first+1); [server getHeaderRange: first : last group: group priority: 0]; } -(void) nntp_headerRange: (int)group : (int)first : (int)last : (int)num : (char **)list partial: (BOOL)partial qid: (unsigned int)qid { static const char *fields[8]= {0,"Real-Subject","Real-From","Real-Date","Real-Message-ID", "Real-References","Real-Bytes","Real-Lines"}; /* TODO: can't be static since different NNTPSource:s might have different mdb:s. should probably keep in an instance variable. */ int field_nums[8]; int i; int gnum; if (!num) return; // printf("got %i headers in\n",num); for (gnum=0;gnum