static int replay_read(void) { size_t len; char read_line[MAXLEN]; while (1) { replay_read_line(); /* if it's a sent line, break out to handle it */ if (!strncmp(replay_line+29, " ", 3)) break; if (!strncmp(replay_line+29, "W: ", 3)) { log_module(MAIN_LOG, LOG_ERROR, "Expected response from services: %s", replay_line+32); replay_line[0] = 0; } else { return 0; } } log_replay(MAIN_LOG, false, replay_line+32); safestrncpy(read_line, replay_line+32, sizeof(read_line)); len = strlen(read_line); if (read_line[len-1] == '\n') read_line[--len] = 0; replay_line[0] = 0; parse_line(read_line, 0); lines_processed++; return 1; }
int main (int argc, char **argv) { int srv_fd, cfd; hashtable_init(&db, 16); log_fd = log_init("CaStore.log"); log_replay(log_fd, &db); struct sockaddr_in servaddr; srv_fd = socket(AF_INET, SOCK_STREAM, 0); int yep = 1; setsockopt(srv_fd, SOL_SOCKET, SO_REUSEADDR, &yep, sizeof(int)); bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htons(INADDR_ANY); servaddr.sin_port = htons(11124); bind(srv_fd, (struct sockaddr *) &servaddr, sizeof(servaddr)); listen(srv_fd, 10); while (1) { cfd = accept(srv_fd, (struct sockaddr*) NULL, NULL); setsockopt(cfd, IPPROTO_TCP, TCP_NODELAY, &yep, sizeof(int)); printf("Accettato il client %d\n", cfd); struct client *cl =(struct client *)malloc(sizeof(struct client)); pthread_t tred_id; cl->fd = cfd; pthread_create(&tred_id, NULL, client_thread, cl); } close(srv_fd); return(0); }
static void replay_write(char *text) { replay_read_line(); if (strncmp(replay_line+29, "W: ", 3)) { log_module(MAIN_LOG, LOG_ERROR, "Unexpected output during replay: %s", text); return; } else { if (strcmp(replay_line+32, text)) { log_module(MAIN_LOG, LOG_ERROR, "Incorrect output during replay:\nReceived: %sExpected: %s", text, replay_line+32); } else { log_replay(MAIN_LOG, true, text); } replay_line[0] = 0; } }
static int log_recover( struct jx_database *db, time_t snapshot ) { char filename[PATH_MAX]; struct tm *t = gmtime(&snapshot); int year = t->tm_year + 1900; int day = t->tm_yday; sprintf(filename,"%s/%d/%d.ckpt",db->logdir,year,day); checkpoint_read(db,filename); sprintf(filename,"%s/%d/%d.log",db->logdir,year,day); log_replay(db,filename,snapshot); return 1; }
static void uplink_readable(struct io_fd *fd) { static char buffer[MAXLEN]; char *eol; int pos; pos = ioset_line_read(fd, buffer, sizeof(buffer)); if (pos <= 0) { close_socket(); return; } if ((eol = strpbrk(buffer, "\r\n"))) *eol = 0; log_replay(MAIN_LOG, false, buffer); if (cManager.uplink->state != DISCONNECTED) parse_line(buffer, 0); lines_processed++; }
void putsock(const char *text, ...) { va_list arg_list; char buffer[MAXLEN]; int pos; if (!cManager.uplink || cManager.uplink->state == DISCONNECTED) return; buffer[0] = '\0'; va_start(arg_list, text); pos = vsnprintf(buffer, MAXLEN - 2, text, arg_list); va_end(arg_list); if (pos < 0 || pos > (MAXLEN - 2)) pos = MAXLEN - 2; buffer[pos] = 0; if (!replay_file) { log_replay(MAIN_LOG, true, buffer); buffer[pos++] = '\n'; buffer[pos] = 0; ioset_write(socket_io_fd, buffer, pos); } else { replay_write(buffer); } }