rendered paste body//main.h
#define IRCPORT 6667
#define MSGLEN 513 //max irc message + \r\n + \0
#define IP "64.251.15.82"
#define ENDLINE "\r\n"
//main.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <time.h>
#include "main.h"
int main(void){
int sockfd, ret, loop;
char sizer[MSGLEN], tmpbuf[MSGLEN * 2], cycbuf[MSGLEN * 2], msg[MSGLEN], *ptmpbuf;
void *getmem(size_t size);
char *getmessage(char **buf, char *msg);
int handlemsg(char *buf, time_t now, time_t start, int loop);
time_t now, start;
struct sockaddr_in my_addr;
sockfd = socket(PF_INET, SOCK_STREAM, 0);
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(IRCPORT);
my_addr.sin_addr.s_addr = inet_addr(IP);
memset(my_addr.sin_zero, '\0', sizeof((my_addr.sin_zero)));
connect(sockfd, (struct sockaddr *)&my_addr, sizeof(my_addr));
time(&start);
loop = 0;
while(1){
time(&now);
ret = recv(sockfd, tmpbuf, 512, 0);
if((loop++ > 0) && (strlen(cycbuf) > 0)){
//concatonate tmpbuf to the end of cycbuf:
strcat(cycbuf, tmpbuf);
//moving content back to tmpbuf:
strcpy(tmpbuf, cycbuf);
}
ptmpbuf = tmpbuf; //need/want a pointer for fancy positioning
if(ret < 1){
printf("Disconnected.\n");
break;
}
while((getmessage(&ptmpbuf, msg)) != NULL){
if(handlemsg(msg, now, start, loop)){
printf("Quit.\n");
break;
}
}
memset(cycbuf, '\0', (MSGLEN * 2));
strncpy(cycbuf, ptmpbuf, sizeof(sizer)); //copying (at most 512 characters) what's left over: in the middle of a message maybe, that is still waiting for a \r\n
memset(tmpbuf, '\0', (MSGLEN * 2));
}
printf("Exit.\n");
return 0;
}
void *getmem(size_t size){
void *p;
if((p = malloc(size)) == NULL){
perror("Not enough memory for call to getmem");
exit(EXIT_FAILURE);
}
return p;
}
//bot.c
#include <stdio.h>
#include <string.h>
#include <time.h>
#include "main.h"
int handlemsg(char *buf, time_t now, time_t start, int loop){
printf("BEGIN BUF: (%d.)\n buf: %s\n END BUFF (%d.) \n\n", loop, buf, loop);
return 0;
}
//copies characters from *buf into *msg until \r\n found.
char *getmessage(char **buf, char *msg){
size_t substrlen;
char *pos = NULL;
pos = strstr(*buf, ENDLINE);
if(pos != NULL){
substrlen = strcspn(*buf, ENDLINE);
memset(msg, '\0', MSGLEN);
strncpy(msg, *buf, substrlen);
pos += 2;
*buf = pos;
}
return pos;
}