예제 #1
0
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);
    }
}
예제 #2
0
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
}
예제 #3
0
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;
    }
}
예제 #4
0
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;
}
예제 #5
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;
}