Пример #1
0
int
decode_context (char *dst, int *dstlen, const void *src, int srclen)
{
    base64_ctx x;
    int i;
    int n;
    int m;
    const unsigned char *p = src;

    if (base64_init (&x) < 0)
        return (-1);
    for (i = 0, n = 0; i < srclen; i++) {
        if (base64_decode_update (&x, dst, &m, p + i, 1) < 0)
            return (-1);
        dst += m;
        n += m;
    }
    if (base64_decode_final (&x, dst, &m) < 0)
        return (-1);
    if (base64_cleanup (&x) < 0)
        return (-1);
    n += m;
    *dstlen = n;
    return (0);
}
Пример #2
0
int
encode_context ( char *dst, int *dstlen,
                const  char *src, int srclen)
{
    base64_ctx x;
    int i;
    int n;
    int m;

    if (base64_init (&x) < 0)
        return (-1);
    for (i=0, n=0; i<srclen; i++) {
        if (base64_encode_update (&x, dst, &m, src + i, 1) < 0)
            return (-1);
        dst += m;
        n += m;
    }
    if (base64_encode_final (&x, dst, &m) < 0)
        return (-1);
    if (base64_cleanup (&x) < 0)
        return (-1);
    n += m;
    *dstlen = n;
    return (0);
}
Пример #3
0
int main(int argc, char *argv[]) {
    if(argc < 2) {
        printf("Usage: raftd <id> <basedir>\n");
        return 1;
    }
    base64_init();

    int id = atoi(argv[1]);
    if(id < 1 || id > 3) {
        printf("Usage: raftd <id>\n");
        printf("provided <id> > 0 && <id> <= 3\n");
        return 1;
    }
    srandom(id);

    verbosity = LOG_DEBUG;

    struct server_context_t *s = init_raft_server(id, argv[2], 
            "0.0.0.0", ports[id - 1], HTTP, 1000000l, 500000l);
    int peers[2];
    int peer_ports[2];
    for(int i = 1, j = 0; i <= 3; i++) {
        if(id != i) {
            peers[j] = i; 
            peer_ports[j] = ports[i - 1];
            j++;
        }
    }
    printf("Server port = %d\n", ports[id - 1]);
    printf("Peer ports =  %d %d\n", peer_ports[0], peer_ports[1]);
    const char *hosts[] = { "0.0.0.0", "0.0.0.0" };
    if(s) {
        if(add_pairs(s, 2, peers, hosts, peer_ports)) {
            DBG_LOG(LOG_FATAL, "[%s][%d] Error while adding peers to server", ss[s->state], s->current_term);
            deinit_raft_server(s);
            return 1;
        } 
    } else {
        DBG_LOG(LOG_FATAL, "[?][?] Error while creating server instance");
        exit(1);
    }
    int clientport = ports[id - 1] + 10;
    printf("Client port = %d\n", clientport);
    start_server(s, clientport);
    
    deinit_raft_server(s);
    base64_cleanup();

    return 0;
}
Пример #4
0
int main() {
    {
        struct request_vote_input_t in = {41, 42, 43, 44};
        struct method_t *rv = make_request_vote_rpc_method(&in);
        if(rv) {
            if(strcmp(rv->name, REQUEST_VOTE_RPC)) {
                printf("failed = expected %s actual %s\n", REQUEST_VOTE_RPC, rv->name);
            } else {
                if(rv->nparams != REQUEST_VOTE_PARAM_COUNT) {
                    printf("failed = expected %d actual %d\n", REQUEST_VOTE_PARAM_COUNT, rv->nparams);
                } else {
                    if(*(json_int_t *)rv->params[0]->value != 41 ||
                            *(json_int_t *)rv->params[1]->value != 42 ||
                            *(json_int_t *)rv->params[2]->value != 43 ||
                            *(json_int_t *)rv->params[3]->value != 44) {
                        printf("failed = incorrect values in params\n");
                    }
                }
            }
            free_method_t(rv);
        } else {
            printf("failed = null method\n");
        }
    }
    {
        base64_init();
        unsigned char buf[] = {0, 41, 12, 33};
        struct log_entry_t le1 = { buf, 4, 42, 43 };
        struct log_entry_t *les[] = { &le1 };
        struct append_entries_input_t in = {41, 42, 43, 44, 45, les, 1};
        struct method_t *rv = make_append_entries_rpc_method(&in);
        if(rv) {
            if(strcmp(rv->name, APPEND_ENTRIES_RPC)) {
                printf("failed = expected %s actual %s\n", APPEND_ENTRIES_RPC, rv->name);
            } else {
                if(rv->nparams != APPEND_ENTRIES_PARAM_COUNT) {
                    printf("failed = expected %d actual %d\n", APPEND_ENTRIES_PARAM_COUNT, rv->nparams);
                } else {
                    if(*(json_int_t *)rv->params[0]->value != 41 ||
                            *(json_int_t *)rv->params[1]->value != 42 ||
                            *(json_int_t *)rv->params[2]->value != 43 ||
                            *(json_int_t *)rv->params[3]->value != 44 ||
                            *(json_int_t *)rv->params[4]->value != 45) {
                        printf("failed = incorrect values in params\n");
                    } else {
                        if(rv->params[5]->length == 1) {
                            struct data_t *dx = rv->params[5]->child[0];
                            char *d = (char *)dx->child[0]->value;
                            uint64_t term = *(json_int_t *)dx->child[1]->value;
                            uint64_t index = *(json_int_t *)dx->child[2]->value;
                            size_t outlen = 0;
                            unsigned char *buf = base64_decode(d, strlen(d), &outlen); 
                            if(outlen == 4) {
                                if(buf[0] != 0 || buf[1] != 41 || buf[2] != 12 || buf[3] != 33 || term != 42 || index != 43) {
                                    printf("failed = incorrect values in decoded buf\n");
                                }
                            } else {
                                printf("failed = incorrect values in decoded params\n");
                            }
                            if(buf) free(buf);
                        } else {
                            printf("failed = incorrect values in array params\n");
                        }
                    }
                }
            }
            free_method_t(rv);
        } else {
            printf("failed = null method\n");
        }
        base64_cleanup();
    }
    {
        struct request_vote_output_t o = {41, 42};
        struct data_t *r = make_request_vote_rpc_response(&o);
        if(r) {
            if(r->type != RPC_VECTOR || r->length != 2) {
                printf("failed = incorrect values in output\n");
            }
            free_data_t(r);
        } else {
            printf("failed = null output\n");
        }
    }
    {
        struct append_entries_output_t o = {41, 42};
        struct data_t *r = make_append_entries_rpc_response(&o);
        if(r) {
            if(r->type != RPC_VECTOR || r->length != 2) {
                printf("failed = incorrect values in output\n");
            }
            free_data_t(r);
        } else {
            printf("failed = null output\n");
        }
    }

    return 0;
}
Пример #5
0
void interface_cleanup() {
    base64_cleanup();
}