SPICE建立Channel的详细步骤及消息传递流程

来源:互联网 发布:网络名词233是什么意思 编辑:程序博客网 时间:2024/05/16 05:05

http://blog.chinaunix.net/uid-24709751-id-4035504.html


参考 http://www.cnblogs.com/D-Tec/archive/2013/04/19/3030129.html
建立Channel的详细步骤及消息传递流程如下:(s表示server代码,c表示client代码)


  1. s: reds_init_net, 注册回调reds_accept 创建listen socket,增加监听watch_add(reds_accept),后续加入select监听

  2. c: RedChannel::run-》RedChannelBase::connect()-》RedPeer::connect_unsecure发送连接请求,等待服务端accept

  3. s: reds_accept
  4.     -》spice_server_add_client,reds_handle_new_link
  5.         -async_read_handler,异步接收数据,需要客户端发送数据,填充link->link_header结束
  6. c: RedChannelBase::link() -》link_mess.channel_type = _type,send 发送link请求,recive等待
  7. s:            -》reds_handle_read_header_done,
  8.                 -》async_read_handler,填充link->link_mess
  9.                     -》reds_handle_read_link_done
  10.                         —》async_read_handler,填充link->auth_mechanism
  11.                             ->reds_handle_auth_mechanism
  12.                                 ->reds_get_spice_ticket
  13.                                    —》async_read_handler,填充link->tiTicketing.encrypted_ticket.encrypted_data
  14.                                        —》 reds_handle_ticket
  15.                                            ->reds_handle_link
  16.                                              ->if (link->link_mess->channel_type == SPICE_CHANNEL_MAIN) { reds_handle_main_link(link); }

  17.    async_read_handler-》reds_stream_read堵塞,等待客户端发送消息
  18.  
reds_handle_main_link流程
    -》reds_send_link_result(link, SPICE_LINK_ERR_OK);

  1. c->s: SPICE_CHANNEL_MAIN s: reds_handle_main_link,此过程的详细步骤如上

  2. s->c: SPICE_MSG_MAIN_INIT, c: handle_init

  3. c->s: SPICE_MSGC_MAIN_ATTACH_CHANNELS s: reds_send_channels

  4. s->c: SPICE_MSG_MAIN_CHANNELS_LIST c: handle_channels

0 0
原创粉丝点击