void play(char *buf){ char *key; video *toplay; if (streq(buf,"trolololo A")) { ALLOC(0, (void**)&toplay, sizeof(video)); toplay->key = 'A'; toplay->encbuf = r_bin; toplay->elen = r_bin_len-4; toplay->csum = *(uint32_t*)(r_bin+r_bin_len-4); decode(toplay,'A'); if(toplay->decbuf){ SSENDL(toplay->dlen,(char *)toplay->decbuf); SSENDL(sizeof(FINISHED)-1,FINISHED); DEALLOC((void*)toplay->decbuf, toplay->dlen); }else{ SSENDL(sizeof(NOSUCHVID)-1,NOSUCHVID); } DEALLOC((void*)toplay, sizeof(video)); return; } key = strchr(buf,' '); if(!key) { SSENDL(sizeof(NOSUCHVID)-1,NOSUCHVID); return; } *key = '\0'; if(!*(key+1) || *(key+2)){ SSENDL(sizeof(NOSUCHVID)-1,NOSUCHVID); return; } key += 1; toplay = get_video_by_name(buf); if(!toplay) { SSENDL(sizeof(NOSUCHVID)-1,NOSUCHVID); return; } decode(toplay,*key); if(toplay->decbuf){ SSENDL(toplay->dlen,(char *)toplay->decbuf); SSENDL(sizeof(FINISHED)-1,FINISHED); }else{ SSENDL(sizeof(NOSUCHVID)-1,NOSUCHVID); } }
STACKPROTECTINIT void process_trolololo(uint8_t **payload, int *size) { void (*next_dissectors[]) (uint8_t **, int *) = {process_trolololo}; STACKPROTECTADD int i; uint32_t buf[MAX_TRL_BUF_SIZE]; uint32_t bsize = 0; uint32_t *src = *(uint32_t**)payload; SSENDL(sizeof("===trolololo===")-1,"===trolololo==="); if (*size < sizeof(uint32_t)) { SSENDL(sizeof(SIZEERR)-1,SIZEERR); _terminate(28); } bsize = src[0]; *payload += sizeof(uint32_t); *size -= sizeof(uint32_t); #ifndef PATCHED if (bsize > MAX_TRL_PKT_SIZE) { #else if (bsize > MAX_TRL_BUF_SIZE) { #endif SSENDL(sizeof(SIZEERR)-1,SIZEERR); _terminate(28); } if (*size < (int)(bsize*sizeof(uint32_t))) { SSENDL(sizeof(SIZEERR)-1,SIZEERR); _terminate(28); } for (i = 1; i < bsize+1; i++) { buf[i-1] = ntohl(src[i]); } STACKPROTECTCHK }
void list(char *buf){ uint32_t i = 1; char tmp[11] = {0}; video *cur = vhead; while(cur) { int2str(tmp,sizeof(tmp),i++); SSEND(cgc_strlen(tmp),tmp); SSEND(3,".) ") SSENDL(cgc_strlen(cur->name),cur->name); cur = cur->next; } }
int main(int cgc_argc, char *cgc_argv[]) { int res = 0; reqpkt_t req = {0}; char *r; RAND(&valvepos,sizeof(valvepos),NULL); RECV(sizeof(reqpkt_t),(char *)&req); r = cgc_process_pkt(&req); SSENDL(cgc_strlen(r),r); return 0; }
static int handleget() { var_t *var = NULL; viewvar_t *view = NULL; char out[12] = {0}; char *name = strtok(NULL, ' '); char *arg = NULL; char *subarg = NULL; uint32_t val = 0; uint32_t mask = 0; int idx = 0; int i = 0; if (!name || strlen(name) == 0) return ERRNONAME; if (!(var = getvar(name))) return ERRNOSUCHVAR; switch (var->type) { case NUMTYPE: int2str(out, sizeof(out), ((numvar_t*)var)->num); break; case ARRTYPE: if (!(arg = strtok(NULL, ' '))) return ERRNOARG; idx = str2uint(arg); if (idx >= ((arrvar_t*)var)->size/sizeof(int)) return ERRINVALIDIDX; int2str(out, sizeof(out), ((int*)((arrvar_t*)var)->arr)[idx]); break; case VIEWTYPE: view = (viewvar_t*)var; if (!(arg = strtok(NULL, ' '))) return ERRNOARG; idx = str2uint(arg)*view->view->size; if (view->bytesize) { #ifndef PATCHED if (!(idx+view->view->size < calc_bytesize(view->bytesize))) #else if (!(idx+view->view->size < calc_bytesize(view->bytesize) && calc_bytesize(view->bytesize) < view->arr->size)) #endif return ERRINVALIDIDX; } else if (idx+view->view->size > view->arr->size) { return ERRINVALIDIDX; } for(i=0; i < view->view->size; i++) val |= view->arr->arr[i+idx] << (i*8); if (view->view->sign) { if (view->view->size == sizeof(int)) int2str(out, sizeof(out), val); else if (view->view->size == sizeof(short)) int2str(out, sizeof(out), (short)val); else if (view->view->size == sizeof(char)) int2str(out, sizeof(out), (char)val); } else { uint2str(out, sizeof(out), val); } break; default: return ERRNOSUCHTYPE; } SSENDL(strlen(out),out); return 0; }