Exemple #1
0
void callback_init(){
    frame_header_init();
    window_colorbuttons_init();
    window_init("unnamed show");
    frame_update_current(color_button);
    frame_copy();
}
Exemple #2
0
void send_thread(void *args)
{
    transfer_session    *session;
    file_desc           *f_desc;
    file_block_desc     *b_desc;
    file_frame_data     *file_frame;
    frame_index         *f_index;
    frame_header        *f_header;
    block_sent_frame    bs;
    int                 qid;
    q_msg               f_msg;
    int                 err;
    int                 frame_len = 0, len = 0, blk_count = 0;
    unsigned short      b_index = 0;
    char                buf_send[2061];
#if DEBUG
    char test[10];
    FILE *fp;
    fp = fopen("receive.txt", "w");
#endif
    struct  timeval  start;
    struct  timeval  end;
    float   time_used;
    char    started = 0;
    int     send_count = 0;
    int     ret_val = 0;

    
    session = (transfer_session *)args;
    f_desc = session->f_desc;
    blk_count = f_desc->block_count;
    frame_block_sent_init(&bs);

    if((qid = session->data_qid) < 0)
    {
        printf("msg q error");
        return;
    }

    frame_header_init(FRAME_TYPE_DATA, FRAME_DATA_MONITOR, &f_header);
    for(;;)
    {
            if (session->state != STATE_TRANSFER)
            {
                /* free the packages in the queue */
                while(recv_msg_q(qid, &f_msg, sizeof(q_msg),\
                        MSG_TYPE_FILE_FRAME, IPC_NOWAIT) >= 0)
                {
                    file_frame = (file_frame_data *)(f_msg.msg_buf.data);
                    t_free(file_frame);
                }
                //t_free(f_header);
                //return;
                sleep(1);
                continue;
            }
            /* get frame from msg q */
            if ((err = recv_msg_q(qid, &f_msg, sizeof(q_msg),\
                    MSG_TYPE_FILE_FRAME, IPC_NOWAIT)) < 0)  
            {  
                /* no msg in the queue, assum sending finished */
                if(started)
                {
                    gettimeofday(&end,NULL);
                    time_used = (end.tv_sec - start.tv_sec) * 1000000\
                                + (end.tv_usec - start.tv_usec);
                    time_used /= 1000000;
                    printf("send_time_used = %f s\n", time_used);
                    printf("send_frame_count = %d \n", send_count);
                    send_count = 0;
                    started = 0;
                }
                sleep(1);
                continue;
            }
            if(0 == started)
            {
                gettimeofday(&start, NULL);
                started = 1;
            }
            
                        

            file_frame = (file_frame_data *)(f_msg.msg_buf.data);
            b_index = file_frame->block_index;
            /* encapusulate frame */
            file_frame->file_id = HTONS(file_frame->file_id);
            file_frame->block_index = HTONS(file_frame->block_index);
            file_frame->frame_index = HTONS(file_frame->frame_index);
            //printf("send data block:%d, frame:%d\n", HTONS(file_frame->block_index), HTONS(file_frame->frame_index));
            frame_len = frame_build(f_header, file_frame, sizeof(file_frame_data), buf_send);
            
            if(f_msg.msg_buf.data_len < FILE_FRAME_SIZE)
            {
                ((frame_header *)buf_send)->length = HTONS(f_msg.msg_buf.data_len + 11);
                frame_crc_gen((frame_header *)buf_send, (unsigned char *)buf_send + 6,\
                                f_msg.msg_buf.data_len + 6);
            }
            
            /* send file data frame */
            ret_val = send_file_data(session, buf_send, f_msg.msg_buf.data_len + 13);
            if(ret_val < 0)
            {
                printf("return value:%d.\n", ret_val);
                perror("send to!");
            }
            send_count++;
            
            if(!f_desc->frame_remain)
            {
                t_free(file_frame);
                continue;
            }
            f_desc->frame_remain[b_index - 1]--;
            if(f_desc->frame_remain[b_index - 1] == 0)
            {
                bs.file_id = HTONS(f_desc->file_id);
                bs.block_index = file_frame->block_index;
                frame_crc_gen(&(bs.f_header), (unsigned char*)(&bs.file_id), 4);
                if ((len = send(session->fd, (char *)(&bs), sizeof(block_sent_frame), 0))\
                            != sizeof(block_sent_frame))           
                {
                    printf("send socket finished failed.\n");
                    session->state = STATE_CONN_LOST;
                    t_free(file_frame);
                    continue;
                }
                printf("block:%d has send completed.\n", HTONS(bs.block_index));

                /* if all count have been sent, tansfer finished */
                //blk_count--;
                //if(blk_count == 0)
                //    session->state = STATE_TRANSFER_FIN;
            }
            
            /* free the data after send */
            t_free(file_frame);

    }
    t_free(f_header);

}