diff options
author | ilsimo <ilsimo> | 2007-03-25 13:42:45 +0000 |
---|---|---|
committer | ilsimo <ilsimo> | 2007-03-25 13:42:45 +0000 |
commit | fd8ce33f59f8be0942aa90443085578b937c542b (patch) | |
tree | ff4af82512f32a11dd28c7558c5cfe84c9194029 /xup/xup.c | |
parent | b1eface57f4424638402cbde5051670cb8041d92 (diff) | |
download | xrdp-proprietary-fd8ce33f59f8be0942aa90443085578b937c542b.tar.gz xrdp-proprietary-fd8ce33f59f8be0942aa90443085578b937c542b.zip |
adding libscp to xup
some fixes for vnc mod
Diffstat (limited to 'xup/xup.c')
-rw-r--r-- | xup/xup.c | 111 |
1 files changed, 51 insertions, 60 deletions
@@ -128,15 +128,19 @@ lib_mod_connect(struct mod* mod) { int error; int len; - int display; + //int display; int i; - int version; + /*int version; int size; int code; - int ok; + int ok;*/ struct stream* s; char con_port[256]; + struct SCP_SESSION scp_s; + struct SCP_CONNECTION scp_c; + enum SCP_CLIENT_STATES_E scp_e; + LIB_DEBUG(mod, "in lib_mod_connect"); /* clear screen */ mod->server_begin_update(mod); @@ -160,81 +164,68 @@ lib_mod_connect(struct mod* mod) /* if port = -1, use sesman to get port / desktop */ if (g_strncmp(mod->port, "-1", 2) == 0) { - display = 0; + scp_s.type=SCP_SESSION_TYPE_XRDP; + scp_s.display=0; + scp_s.height=mod->height; + scp_s.width=mod->width; + scp_s.bpp=mod->bpp; + scp_s.username=g_strdup(mod->username); + scp_s.password=g_strdup(mod->password); + error = 0; init_stream(s, 8192); - mod->sck = g_tcp_socket(); + scp_c.in_sck=g_tcp_socket(); + make_stream((scp_c.in_s)); + make_stream((scp_c.out_s)); + init_stream((scp_c.in_s), 8192); + init_stream((scp_c.out_s), 8192); mod->sck_closed = 0; mod->server_msg(mod, "connecting to sesman", 0); - if (g_tcp_connect(mod->sck, mod->ip, "3350") == 0) + if (g_tcp_connect(scp_c.in_sck, mod->ip, "3350") == 0) { - g_tcp_set_non_blocking(mod->sck); - g_tcp_set_no_delay(mod->sck); - s_push_layer(s, channel_hdr, 8); - out_uint16_be(s, 10); // code - i = g_strlen(mod->username); - out_uint16_be(s, i); - out_uint8a(s, mod->username, i); - i = g_strlen(mod->password); - out_uint16_be(s, i); - out_uint8a(s, mod->password, i); - out_uint16_be(s, mod->width); - out_uint16_be(s, mod->height); - out_uint16_be(s, mod->bpp); - s_mark_end(s); - s_pop_layer(s, channel_hdr); - out_uint32_be(s, 0); // version - out_uint32_be(s, s->end - s->data); // size - mod->server_msg(mod, "sending login info to sesman", 0); - error = lib_send(mod, s->data, s->end - s->data); - if (error == 0) - { - init_stream(s, 8192); - mod->server_msg(mod, "receiving sesman header", 0); - error = lib_recv(mod, s->data, 8); - } - if (error == 0) + error=1; + scp_e=scp_v0c_connect(&scp_c, &scp_s); + switch (scp_e) { - in_uint32_be(s, version); - in_uint32_be(s, size); - init_stream(s, 8192); - mod->server_msg(mod, "receiving sesman data", 0); - error = lib_recv(mod, s->data, size - 8); - } - if (error == 0) - { - if (version == 0) - { - in_uint16_be(s, code); - if (code == 3) - { - in_uint16_be(s, ok); - if (ok) - { - in_uint16_be(s, display); - } - else - { - in_uint8s(s, 2); - mod->server_msg(mod, "error - sesman returned no", 0); - } - } - } + case SCP_CLIENT_STATE_CONNECTION_DENIED: + mod->server_msg(mod, "error - sesman returned no", 0); + break; + case SCP_CLIENT_STATE_VERSION_ERR: + mod->server_msg(mod, "error - libscp version error", 0); + break; + case SCP_CLIENT_STATE_SIZE_ERR: + mod->server_msg(mod, "error - libscp size error", 0); + break; + case SCP_CLIENT_STATE_NETWORK_ERR: + mod->server_msg(mod, "error - libscp network error", 0); + break; + case SCP_CLIENT_STATE_SEQUENCE_ERR: + mod->server_msg(mod, "error - libscp sequence error", 0); + break; + case SCP_CLIENT_STATE_END: + mod->server_msg(mod, "error - sesman returned ok", 0); + error=0; + break; + default: + mod->server_msg(mod, "error - unknown error", 0); } + } else { mod->server_msg(mod, "error - connecting to sesman", 0); } - g_tcp_close(mod->sck); - if (error != 0 || display == 0) + g_free(scp_s.username); + g_free(scp_s.password); + g_tcp_close(scp_c.in_sck); + if (error != 0 || scp_s.display == 0) { mod->server_msg(mod, "error - connection failed", 0); free_stream(s); return 1; } mod->server_msg(mod, "sesman started a session", 0); - g_sprintf(con_port, "%d", 6200 + display); + g_sprintf(con_port, "%d", 6200 + scp_s.display); } else { |