Ejemplo n.º 1
0
void protocol_start_session(DbXmlSessionData *session) {

  int r;
  DbXmlCredentials cred;
  DbXmlSessionOptions options;
  DbXmlSessionOptions *options_set;
  memset(&cred, 0, sizeof(DbXmlCredentials));
  memset(&options, 0, sizeof(DbXmlSessionOptions));

  if (initial_handshake(session) != 0)
    return;

  r = receive_credentials(session, &cred);

  if (r == 0)
    r = check_authentication(session, &cred);
  
  free_credentials(session, &cred);

  r = receive_session_options(session, &options);

  int init = -1;
  options_set = NULL;
  if (r == 0)
    init = r = initialize_session(session, &options, &options_set);

  session_response(session, r);

  if (r != 0)
    return;
  
  if (r == 0)
    r = send_session_options(session, options_set);

  free_session_options(session, &options);

  if (r == 0)
    protocol_request_response(session);
  
  if (init == 0)
    free_session(session);
  
}
Ejemplo n.º 2
0
/* ==================== session_handle_write() ==================== */ 
int session_handle_write(session_t *session, message_t *request)
{
    msgidx_t msgidx;

    /** ----------------------------------------
     *    Parse request
     *  ---------------------------------------- */

    if ( parse_write_request(session, request, &msgidx) != 0 ){
        error_log("parse_write_request() failed. key:%s", msgidx.key);
        return -1;
    }

    /** ----------------------------------------
     *    Write cache
     *  ---------------------------------------- */

    object_t *object = session_write_to_cache(session, &msgidx);
    if (  object == NULL ) {
        error_log("session_write_block() failed.");
        return -1;
    }

    /** ----------------------------------------
     *    Write to kvdb..
     *  ---------------------------------------- */

    if ( session->total_writed >= msgidx.object_size ){

        session_write_to_kvdb(session, object, &msgidx);

        /** ----------------------------------------
         *    Response to client 
         *  ---------------------------------------- */

        session_response(session, RESULT_SUCCESS);

        /*pthread_yield();*/
        sched_yield();
    }

    return 0;
}
Ejemplo n.º 3
0
/* ==================== server_handle_write() ==================== */ 
int server_handle_write(session_t *session, message_t *request)
{
    int ret = 0;
    msgidx_t msgidx;
    msgidx_init(&msgidx);

    /** ----------------------------------------
     *    Parse request
     *  ---------------------------------------- */

    if ( parse_write_request(session, request, &msgidx) != 0 ){
        error_log("parse_write_request() failed. key:%s", msgidx.key);
        ret = -1;
    } else {

        if ( session->total_writed == 0 ){
            __sync_add_and_fetch(&session->running_tasks, 1);
        }
        /** ----------------------------------------
         *    Write cache
         *  ---------------------------------------- */

        object_t *object = server_write_to_cache(session, &msgidx);
        if (  object == NULL ) {
            error_log("session_write_to_cache() failed.");
            __sync_add_and_fetch(&session->finished_works, 1);
            session->total_writed = 0;
            ret = -1;
        } else {

            /** ----------------------------------------
             *    Write to storage & Response to client.
             *  ---------------------------------------- */

            if ( session->total_writed >= msgidx.object_size ){

                /* FIXME 2014-10-23 15:49:37 */
                /*vnode_t *vnode = get_vnode_by_key(SERVER(session), &object->key_md5);*/
                /*vnode_enqueue_write_queue(vnode, session, object);*/

                server_write_to_storage(SERVER(session), object);
                session_response(session, RESULT_SUCCESS);

                __sync_add_and_fetch(&session->finished_works, 1);
                __sync_sub_and_fetch(&session->running_tasks, 1);

                /*message_t *response = alloc_response_message(RESULT_SUCCESS);*/
                /*listAddNodeTail(session->responseQueue, response);*/

                session->total_writed = 0;

                /* FIXME */
                /*vnode_write_queue_entry_t *entry = (vnode_write_queue_entry_t*)zmalloc(sizeof(vnode_write_queue_entry_t));*/
                /*memset(entry, 0, sizeof(vnode_write_queue_entry_t));*/
                /*entry->session = session;*/
                /*entry->object = object;*/

                /*enqueue_work(vnode->write_queue, entry);*/


                /*pthread_yield();*/
                /*sched_yield();*/
            } 
        }
    }

    return ret;
}