Removed struct SCP_CONNECTION type entirely
This commit is contained in:
parent
3643cc37ec
commit
a10de5c5aa
@ -32,32 +32,14 @@
|
||||
|
||||
//extern struct log_config* s_log;
|
||||
|
||||
struct SCP_CONNECTION *
|
||||
scp_connection_create(int sck)
|
||||
struct trans *
|
||||
scp_trans_create(int sck)
|
||||
{
|
||||
struct SCP_CONNECTION *conn;
|
||||
|
||||
conn = g_new(struct SCP_CONNECTION, 1);
|
||||
|
||||
if (0 == conn)
|
||||
struct trans *result = trans_create(TRANS_MODE_TCP, 8192, 8192);
|
||||
if (result != NULL)
|
||||
{
|
||||
LOG(LOG_LEVEL_ERROR, "[connection:%d] connection create: malloc error", __LINE__);
|
||||
return 0;
|
||||
result->sck = sck;
|
||||
}
|
||||
|
||||
conn->in_sck = sck;
|
||||
make_stream(conn->in_s);
|
||||
init_stream(conn->in_s, 8196);
|
||||
make_stream(conn->out_s);
|
||||
init_stream(conn->out_s, 8196);
|
||||
|
||||
return conn;
|
||||
}
|
||||
|
||||
void
|
||||
scp_connection_destroy(struct SCP_CONNECTION *c)
|
||||
{
|
||||
free_stream(c->in_s);
|
||||
free_stream(c->out_s);
|
||||
g_free(c);
|
||||
return result;
|
||||
}
|
||||
|
@ -31,22 +31,18 @@
|
||||
|
||||
/**
|
||||
*
|
||||
* @brief creates a new connection
|
||||
* @brief creates a new SCP transport object
|
||||
* @param sck the connection socket
|
||||
*
|
||||
* @return a struct SCP_CONNECTION* object on success, NULL otherwise
|
||||
* This is a convenience function which calls trans_create() with the
|
||||
* correct parameters.
|
||||
*
|
||||
* Returned object can be freed with trans_delete()
|
||||
*
|
||||
* @return a struct trans* object on success, NULL otherwise
|
||||
*
|
||||
*/
|
||||
struct SCP_CONNECTION *
|
||||
scp_connection_create(int sck);
|
||||
|
||||
/**
|
||||
*
|
||||
* @brief destroys a struct SCP_CONNECTION* object
|
||||
* @param c the object to be destroyed
|
||||
*
|
||||
*/
|
||||
void
|
||||
scp_connection_destroy(struct SCP_CONNECTION *c);
|
||||
struct trans *
|
||||
scp_trans_create(int sck);
|
||||
|
||||
#endif
|
||||
|
@ -64,13 +64,6 @@
|
||||
exhaustion attempts (CVE-2020-4044) */
|
||||
#define SCP_MAX_MESSAGE_SIZE 8192
|
||||
|
||||
struct SCP_CONNECTION
|
||||
{
|
||||
int in_sck;
|
||||
struct stream *in_s;
|
||||
struct stream *out_s;
|
||||
};
|
||||
|
||||
struct SCP_SESSION
|
||||
{
|
||||
tui8 type;
|
||||
|
@ -29,6 +29,9 @@
|
||||
|
||||
#include "libscp.h"
|
||||
|
||||
/*TODO : Replace this (unused) function with something that can be used
|
||||
* by xrdp_mm.c and sesrun.c */
|
||||
#if 0
|
||||
/* client API */
|
||||
/**
|
||||
*
|
||||
@ -40,6 +43,7 @@
|
||||
*/
|
||||
enum SCP_CLIENT_STATES_E
|
||||
scp_v0c_connect(struct SCP_CONNECTION *c, struct SCP_SESSION *s);
|
||||
#endif
|
||||
|
||||
/* server API */
|
||||
/**
|
||||
|
@ -35,18 +35,16 @@
|
||||
#include <stdio.h>
|
||||
|
||||
static enum SCP_CLIENT_STATES_E
|
||||
_scp_v1c_check_response(struct SCP_CONNECTION *c, struct SCP_SESSION *s);
|
||||
_scp_v1c_check_response(struct trans *t, struct SCP_SESSION *s);
|
||||
|
||||
/* client API */
|
||||
/* 001 */
|
||||
enum SCP_CLIENT_STATES_E
|
||||
scp_v1c_connect(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
scp_v1c_connect(struct trans *t, struct SCP_SESSION *s)
|
||||
{
|
||||
tui8 sz;
|
||||
tui32 size;
|
||||
|
||||
init_stream(c->out_s, c->out_s->size);
|
||||
init_stream(c->in_s, c->in_s->size);
|
||||
int size;
|
||||
struct stream *out_s = t->out_s;
|
||||
|
||||
size = (19 + 17 + 4 + g_strlen(s->hostname) + g_strlen(s->username) +
|
||||
g_strlen(s->password));
|
||||
@ -60,94 +58,100 @@ scp_v1c_connect(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
size = size + 16;
|
||||
}
|
||||
|
||||
init_stream(out_s, size);
|
||||
|
||||
/* sending request */
|
||||
|
||||
/* header */
|
||||
out_uint32_be(c->out_s, 1); /* version */
|
||||
out_uint32_be(c->out_s, size);
|
||||
out_uint16_be(c->out_s, SCP_COMMAND_SET_DEFAULT);
|
||||
out_uint16_be(c->out_s, 1);
|
||||
out_uint32_be(out_s, 1); /* version */
|
||||
out_uint32_be(out_s, size);
|
||||
out_uint16_be(out_s, SCP_COMMAND_SET_DEFAULT);
|
||||
out_uint16_be(out_s, 1);
|
||||
|
||||
/* body */
|
||||
out_uint8(c->out_s, s->type);
|
||||
out_uint16_be(c->out_s, s->height);
|
||||
out_uint16_be(c->out_s, s->width);
|
||||
out_uint8(c->out_s, s->bpp);
|
||||
out_uint8(c->out_s, s->rsr);
|
||||
out_uint8p(c->out_s, s->locale, 17);
|
||||
out_uint8(c->out_s, s->addr_type);
|
||||
out_uint8(out_s, s->type);
|
||||
out_uint16_be(out_s, s->height);
|
||||
out_uint16_be(out_s, s->width);
|
||||
out_uint8(out_s, s->bpp);
|
||||
out_uint8(out_s, s->rsr);
|
||||
out_uint8p(out_s, s->locale, 17);
|
||||
out_uint8(out_s, s->addr_type);
|
||||
|
||||
if (s->addr_type == SCP_ADDRESS_TYPE_IPV4)
|
||||
{
|
||||
out_uint32_be(c->out_s, s->ipv4addr);
|
||||
out_uint32_be(out_s, s->ipv4addr);
|
||||
}
|
||||
else if (s->addr_type == SCP_ADDRESS_TYPE_IPV6)
|
||||
{
|
||||
out_uint8p(c->out_s, s->ipv6addr, 16);
|
||||
out_uint8p(out_s, s->ipv6addr, 16);
|
||||
}
|
||||
|
||||
sz = g_strlen(s->hostname);
|
||||
out_uint8(c->out_s, sz);
|
||||
out_uint8p(c->out_s, s->hostname, sz);
|
||||
out_uint8(out_s, sz);
|
||||
out_uint8p(out_s, s->hostname, sz);
|
||||
sz = g_strlen(s->username);
|
||||
out_uint8(c->out_s, sz);
|
||||
out_uint8p(c->out_s, s->username, sz);
|
||||
out_uint8(out_s, sz);
|
||||
out_uint8p(out_s, s->username, sz);
|
||||
sz = g_strlen(s->password);
|
||||
out_uint8(c->out_s, sz);
|
||||
out_uint8p(c->out_s, s->password, sz);
|
||||
out_uint8(out_s, sz);
|
||||
out_uint8p(out_s, s->password, sz);
|
||||
s_mark_end(out_s);
|
||||
|
||||
if (0 != scp_tcp_force_send(c->in_sck, c->out_s->data, size))
|
||||
if (0 != trans_force_write(t))
|
||||
{
|
||||
return SCP_CLIENT_STATE_NETWORK_ERR;
|
||||
}
|
||||
|
||||
/* wait for response */
|
||||
return _scp_v1c_check_response(c, s);
|
||||
return _scp_v1c_check_response(t, s);
|
||||
}
|
||||
|
||||
/* 004 */
|
||||
enum SCP_CLIENT_STATES_E
|
||||
scp_v1c_resend_credentials(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
scp_v1c_resend_credentials(struct trans *t, struct SCP_SESSION *s)
|
||||
{
|
||||
struct stream *out_s = t->out_s;
|
||||
tui8 sz;
|
||||
tui32 size;
|
||||
|
||||
init_stream(c->out_s, c->out_s->size);
|
||||
init_stream(c->in_s, c->in_s->size);
|
||||
int size;
|
||||
|
||||
size = 12 + 2 + g_strlen(s->username) + g_strlen(s->password);
|
||||
|
||||
init_stream(out_s, size);
|
||||
|
||||
/* sending request */
|
||||
/* header */
|
||||
out_uint32_be(c->out_s, 1); /* version */
|
||||
out_uint32_be(c->out_s, size);
|
||||
out_uint16_be(c->out_s, SCP_COMMAND_SET_DEFAULT);
|
||||
out_uint16_be(c->out_s, 4);
|
||||
out_uint32_be(out_s, 1); /* version */
|
||||
out_uint32_be(out_s, size);
|
||||
out_uint16_be(out_s, SCP_COMMAND_SET_DEFAULT);
|
||||
out_uint16_be(out_s, 4);
|
||||
|
||||
/* body */
|
||||
sz = g_strlen(s->username);
|
||||
out_uint8(c->out_s, sz);
|
||||
out_uint8p(c->out_s, s->username, sz);
|
||||
out_uint8(out_s, sz);
|
||||
out_uint8p(out_s, s->username, sz);
|
||||
sz = g_strlen(s->password);
|
||||
out_uint8(c->out_s, sz);
|
||||
out_uint8p(c->out_s, s->password, sz);
|
||||
out_uint8(out_s, sz);
|
||||
out_uint8p(out_s, s->password, sz);
|
||||
s_mark_end(out_s);
|
||||
|
||||
if (0 != scp_tcp_force_send(c->in_sck, c->out_s->data, size))
|
||||
if (0 != trans_force_write(t))
|
||||
{
|
||||
return SCP_CLIENT_STATE_NETWORK_ERR;
|
||||
}
|
||||
|
||||
/* wait for response */
|
||||
return _scp_v1c_check_response(c, s);
|
||||
return _scp_v1c_check_response(t, s);
|
||||
}
|
||||
|
||||
/* 041 */
|
||||
enum SCP_CLIENT_STATES_E
|
||||
scp_v1c_get_session_list(struct SCP_CONNECTION *c, int *scount,
|
||||
scp_v1c_get_session_list(struct trans *t, int *scount,
|
||||
struct SCP_DISCONNECTED_SESSION **s)
|
||||
{
|
||||
struct stream *in_s = t->in_s;
|
||||
struct stream *out_s = t->out_s;
|
||||
tui32 version = 1;
|
||||
tui32 size = 12;
|
||||
int size = 12;
|
||||
tui16 cmd = 41;
|
||||
tui32 sescnt = 0; /* total session number */
|
||||
tui32 sestmp = 0; /* additional total session number */
|
||||
@ -158,15 +162,16 @@ scp_v1c_get_session_list(struct SCP_CONNECTION *c, int *scount,
|
||||
int idx;
|
||||
struct SCP_DISCONNECTED_SESSION *ds = 0;
|
||||
|
||||
init_stream(c->out_s, c->out_s->size);
|
||||
init_stream(out_s, 64);
|
||||
|
||||
/* we request session list */
|
||||
out_uint32_be(c->out_s, version); /* version */
|
||||
out_uint32_be(c->out_s, size); /* size */
|
||||
out_uint16_be(c->out_s, SCP_COMMAND_SET_DEFAULT); /* cmdset */
|
||||
out_uint16_be(c->out_s, cmd); /* cmd */
|
||||
out_uint32_be(out_s, version); /* version */
|
||||
out_uint32_be(out_s, size); /* size */
|
||||
out_uint16_be(out_s, SCP_COMMAND_SET_DEFAULT); /* cmdset */
|
||||
out_uint16_be(out_s, cmd); /* cmd */
|
||||
s_mark_end(out_s);
|
||||
|
||||
if (0 != scp_tcp_force_send(c->in_sck, c->out_s->data, size))
|
||||
if (0 != trans_force_write(t))
|
||||
{
|
||||
return SCP_CLIENT_STATE_NETWORK_ERR;
|
||||
}
|
||||
@ -174,15 +179,15 @@ scp_v1c_get_session_list(struct SCP_CONNECTION *c, int *scount,
|
||||
do
|
||||
{
|
||||
/* then we wait for server response */
|
||||
init_stream(c->in_s, c->in_s->size);
|
||||
init_stream(in_s, 8);
|
||||
|
||||
if (0 != scp_tcp_force_recv(c->in_sck, c->in_s->data, 8))
|
||||
if (0 != trans_force_read(t, 8))
|
||||
{
|
||||
g_free(ds);
|
||||
return SCP_CLIENT_STATE_NETWORK_ERR;
|
||||
}
|
||||
|
||||
in_uint32_be(c->in_s, version);
|
||||
in_uint32_be(t->in_s, version);
|
||||
|
||||
if (version != 1)
|
||||
{
|
||||
@ -190,7 +195,7 @@ scp_v1c_get_session_list(struct SCP_CONNECTION *c, int *scount,
|
||||
return SCP_CLIENT_STATE_VERSION_ERR;
|
||||
}
|
||||
|
||||
in_uint32_be(c->in_s, size);
|
||||
in_uint32_be(t->in_s, size);
|
||||
|
||||
if (size < 12)
|
||||
{
|
||||
@ -198,15 +203,15 @@ scp_v1c_get_session_list(struct SCP_CONNECTION *c, int *scount,
|
||||
return SCP_CLIENT_STATE_SIZE_ERR;
|
||||
}
|
||||
|
||||
init_stream(c->in_s, c->in_s->size);
|
||||
init_stream(t->in_s, size - 8);
|
||||
|
||||
if (0 != scp_tcp_force_recv(c->in_sck, c->in_s->data, size - 8))
|
||||
if (0 != trans_force_read(t, size - 8))
|
||||
{
|
||||
g_free(ds);
|
||||
return SCP_CLIENT_STATE_NETWORK_ERR;
|
||||
}
|
||||
|
||||
in_uint16_be(c->in_s, cmd);
|
||||
in_uint16_be(in_s, cmd);
|
||||
|
||||
if (cmd != SCP_COMMAND_SET_DEFAULT)
|
||||
{
|
||||
@ -214,7 +219,7 @@ scp_v1c_get_session_list(struct SCP_CONNECTION *c, int *scount,
|
||||
return SCP_CLIENT_STATE_SEQUENCE_ERR;
|
||||
}
|
||||
|
||||
in_uint16_be(c->in_s, cmd);
|
||||
in_uint16_be(in_s, cmd);
|
||||
|
||||
if (cmd != 42)
|
||||
{
|
||||
@ -225,7 +230,7 @@ scp_v1c_get_session_list(struct SCP_CONNECTION *c, int *scount,
|
||||
if (firstpkt)
|
||||
{
|
||||
firstpkt = 0;
|
||||
in_uint32_be(c->in_s, sescnt);
|
||||
in_uint32_be(in_s, sescnt);
|
||||
sestmp = sescnt;
|
||||
|
||||
ds = g_new(struct SCP_DISCONNECTED_SESSION, sescnt);
|
||||
@ -237,37 +242,37 @@ scp_v1c_get_session_list(struct SCP_CONNECTION *c, int *scount,
|
||||
}
|
||||
else
|
||||
{
|
||||
in_uint32_be(c->in_s, sestmp);
|
||||
in_uint32_be(in_s, sestmp);
|
||||
}
|
||||
|
||||
in_uint8(c->in_s, continued);
|
||||
in_uint8(c->in_s, pktcnt);
|
||||
in_uint8(in_s, continued);
|
||||
in_uint8(in_s, pktcnt);
|
||||
|
||||
for (idx = 0; idx < pktcnt; idx++)
|
||||
{
|
||||
in_uint32_be(c->in_s, (ds[totalcnt]).SID); /* session id */
|
||||
in_uint8(c->in_s, (ds[totalcnt]).type);
|
||||
in_uint16_be(c->in_s, (ds[totalcnt]).height);
|
||||
in_uint16_be(c->in_s, (ds[totalcnt]).width);
|
||||
in_uint8(c->in_s, (ds[totalcnt]).bpp);
|
||||
in_uint8(c->in_s, (ds[totalcnt]).idle_days);
|
||||
in_uint8(c->in_s, (ds[totalcnt]).idle_hours);
|
||||
in_uint8(c->in_s, (ds[totalcnt]).idle_minutes);
|
||||
in_uint32_be(in_s, (ds[totalcnt]).SID); /* session id */
|
||||
in_uint8(in_s, (ds[totalcnt]).type);
|
||||
in_uint16_be(in_s, (ds[totalcnt]).height);
|
||||
in_uint16_be(in_s, (ds[totalcnt]).width);
|
||||
in_uint8(in_s, (ds[totalcnt]).bpp);
|
||||
in_uint8(in_s, (ds[totalcnt]).idle_days);
|
||||
in_uint8(in_s, (ds[totalcnt]).idle_hours);
|
||||
in_uint8(in_s, (ds[totalcnt]).idle_minutes);
|
||||
|
||||
in_uint16_be(c->in_s, (ds[totalcnt]).conn_year);
|
||||
in_uint8(c->in_s, (ds[totalcnt]).conn_month);
|
||||
in_uint8(c->in_s, (ds[totalcnt]).conn_day);
|
||||
in_uint8(c->in_s, (ds[totalcnt]).conn_hour);
|
||||
in_uint8(c->in_s, (ds[totalcnt]).conn_minute);
|
||||
in_uint8(c->in_s, (ds[totalcnt]).addr_type);
|
||||
in_uint16_be(in_s, (ds[totalcnt]).conn_year);
|
||||
in_uint8(in_s, (ds[totalcnt]).conn_month);
|
||||
in_uint8(in_s, (ds[totalcnt]).conn_day);
|
||||
in_uint8(in_s, (ds[totalcnt]).conn_hour);
|
||||
in_uint8(in_s, (ds[totalcnt]).conn_minute);
|
||||
in_uint8(in_s, (ds[totalcnt]).addr_type);
|
||||
|
||||
if ((ds[totalcnt]).addr_type == SCP_ADDRESS_TYPE_IPV4)
|
||||
{
|
||||
in_uint32_be(c->in_s, (ds[totalcnt]).ipv4addr);
|
||||
in_uint32_be(in_s, (ds[totalcnt]).ipv4addr);
|
||||
}
|
||||
else if ((ds[totalcnt]).addr_type == SCP_ADDRESS_TYPE_IPV6)
|
||||
{
|
||||
in_uint8a(c->in_s, (ds[totalcnt]).ipv6addr, 16);
|
||||
in_uint8a(in_s, (ds[totalcnt]).ipv6addr, 16);
|
||||
}
|
||||
|
||||
totalcnt++;
|
||||
@ -285,66 +290,69 @@ scp_v1c_get_session_list(struct SCP_CONNECTION *c, int *scount,
|
||||
|
||||
/* 043 */
|
||||
enum SCP_CLIENT_STATES_E
|
||||
scp_v1c_select_session(struct SCP_CONNECTION *c, struct SCP_SESSION *s,
|
||||
scp_v1c_select_session(struct trans *t, struct SCP_SESSION *s,
|
||||
SCP_SID sid)
|
||||
{
|
||||
struct stream *in_s = t->in_s;
|
||||
struct stream *out_s = t->out_s;
|
||||
tui32 version = 1;
|
||||
tui32 size = 16;
|
||||
int size = 16;
|
||||
tui16 cmd = 43;
|
||||
|
||||
init_stream(c->out_s, c->out_s->size);
|
||||
init_stream(out_s, 64);
|
||||
|
||||
/* sending our selection */
|
||||
out_uint32_be(c->out_s, version); /* version */
|
||||
out_uint32_be(c->out_s, size); /* size */
|
||||
out_uint16_be(c->out_s, SCP_COMMAND_SET_DEFAULT); /* cmdset */
|
||||
out_uint16_be(c->out_s, cmd); /* cmd */
|
||||
out_uint32_be(out_s, version); /* version */
|
||||
out_uint32_be(out_s, size); /* size */
|
||||
out_uint16_be(out_s, SCP_COMMAND_SET_DEFAULT); /* cmdset */
|
||||
out_uint16_be(out_s, cmd); /* cmd */
|
||||
|
||||
out_uint32_be(c->out_s, sid);
|
||||
out_uint32_be(out_s, sid);
|
||||
s_mark_end(out_s);
|
||||
|
||||
if (0 != scp_tcp_force_send(c->in_sck, c->out_s->data, size))
|
||||
if (0 != trans_force_write(t))
|
||||
{
|
||||
return SCP_CLIENT_STATE_NETWORK_ERR;
|
||||
}
|
||||
|
||||
/* waiting for response.... */
|
||||
init_stream(c->in_s, c->in_s->size);
|
||||
init_stream(in_s, 8);
|
||||
|
||||
if (0 != scp_tcp_force_recv(c->in_sck, c->in_s->data, 8))
|
||||
if (0 != trans_force_read(t, 8))
|
||||
{
|
||||
return SCP_CLIENT_STATE_NETWORK_ERR;
|
||||
}
|
||||
|
||||
in_uint32_be(c->in_s, version);
|
||||
in_uint32_be(in_s, version);
|
||||
|
||||
if (version != 1)
|
||||
{
|
||||
return SCP_CLIENT_STATE_VERSION_ERR;
|
||||
}
|
||||
|
||||
in_uint32_be(c->in_s, size);
|
||||
in_uint32_be(in_s, size);
|
||||
|
||||
if (size < 12)
|
||||
{
|
||||
return SCP_CLIENT_STATE_SIZE_ERR;
|
||||
}
|
||||
|
||||
init_stream(c->in_s, c->in_s->size);
|
||||
init_stream(in_s, size - 8);
|
||||
|
||||
/* read the rest of the packet */
|
||||
if (0 != scp_tcp_force_recv(c->in_sck, c->in_s->data, size - 8))
|
||||
if (0 != trans_force_read(t, size - 8))
|
||||
{
|
||||
return SCP_CLIENT_STATE_NETWORK_ERR;
|
||||
}
|
||||
|
||||
in_uint16_be(c->in_s, cmd);
|
||||
in_uint16_be(in_s, cmd);
|
||||
|
||||
if (cmd != SCP_COMMAND_SET_DEFAULT)
|
||||
{
|
||||
return SCP_CLIENT_STATE_SEQUENCE_ERR;
|
||||
}
|
||||
|
||||
in_uint16_be(c->in_s, cmd);
|
||||
in_uint16_be(in_s, cmd);
|
||||
|
||||
if (cmd != 46)
|
||||
{
|
||||
@ -352,7 +360,7 @@ scp_v1c_select_session(struct SCP_CONNECTION *c, struct SCP_SESSION *s,
|
||||
}
|
||||
|
||||
/* session display */
|
||||
in_uint16_be(c->in_s, (s->display));
|
||||
in_uint16_be(in_s, (s->display));
|
||||
/*we don't need to return any data other than the display */
|
||||
/*because we already sent that */
|
||||
|
||||
@ -361,21 +369,23 @@ scp_v1c_select_session(struct SCP_CONNECTION *c, struct SCP_SESSION *s,
|
||||
|
||||
/* 044 */
|
||||
enum SCP_CLIENT_STATES_E
|
||||
scp_v1c_select_session_cancel(struct SCP_CONNECTION *c)
|
||||
scp_v1c_select_session_cancel(struct trans *t)
|
||||
{
|
||||
struct stream *out_s = t->out_s;
|
||||
tui32 version = 1;
|
||||
tui32 size = 12;
|
||||
tui16 cmd = 44;
|
||||
|
||||
init_stream(c->out_s, c->out_s->size);
|
||||
init_stream(out_s, 64);
|
||||
|
||||
/* sending our selection */
|
||||
out_uint32_be(c->out_s, version); /* version */
|
||||
out_uint32_be(c->out_s, size); /* size */
|
||||
out_uint16_be(c->out_s, SCP_COMMAND_SET_DEFAULT); /* cmdset */
|
||||
out_uint16_be(c->out_s, cmd); /* cmd */
|
||||
out_uint32_be(out_s, version); /* version */
|
||||
out_uint32_be(out_s, size); /* size */
|
||||
out_uint16_be(out_s, SCP_COMMAND_SET_DEFAULT); /* cmdset */
|
||||
out_uint16_be(out_s, cmd); /* cmd */
|
||||
s_mark_end(out_s);
|
||||
|
||||
if (0 != scp_tcp_force_send(c->in_sck, c->out_s->data, size))
|
||||
if (0 != trans_force_write(t))
|
||||
{
|
||||
return SCP_CLIENT_STATE_NETWORK_ERR;
|
||||
}
|
||||
@ -384,49 +394,50 @@ scp_v1c_select_session_cancel(struct SCP_CONNECTION *c)
|
||||
}
|
||||
|
||||
static enum SCP_CLIENT_STATES_E
|
||||
_scp_v1c_check_response(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
_scp_v1c_check_response(struct trans *t, struct SCP_SESSION *s)
|
||||
{
|
||||
struct stream *in_s = t->in_s;
|
||||
tui32 version;
|
||||
tui32 size;
|
||||
int size;
|
||||
tui16 cmd;
|
||||
tui16 dim;
|
||||
|
||||
init_stream(c->in_s, c->in_s->size);
|
||||
init_stream(in_s, 64);
|
||||
|
||||
if (0 != scp_tcp_force_recv(c->in_sck, c->in_s->data, 8))
|
||||
if (0 != trans_force_read(t, 8))
|
||||
{
|
||||
return SCP_CLIENT_STATE_NETWORK_ERR;
|
||||
}
|
||||
|
||||
in_uint32_be(c->in_s, version);
|
||||
in_uint32_be(in_s, version);
|
||||
|
||||
if (version != 1)
|
||||
{
|
||||
return SCP_CLIENT_STATE_VERSION_ERR;
|
||||
}
|
||||
|
||||
in_uint32_be(c->in_s, size);
|
||||
in_uint32_be(in_s, size);
|
||||
|
||||
init_stream(c->in_s, c->in_s->size);
|
||||
init_stream(in_s, size - 8);
|
||||
|
||||
/* read the rest of the packet */
|
||||
if (0 != scp_tcp_force_recv(c->in_sck, c->in_s->data, size - 8))
|
||||
if (0 != trans_force_read(t, size - 8))
|
||||
{
|
||||
return SCP_CLIENT_STATE_NETWORK_ERR;
|
||||
}
|
||||
|
||||
in_uint16_be(c->in_s, cmd);
|
||||
in_uint16_be(in_s, cmd);
|
||||
|
||||
if (cmd != SCP_COMMAND_SET_DEFAULT)
|
||||
{
|
||||
return SCP_CLIENT_STATE_SEQUENCE_ERR;
|
||||
}
|
||||
|
||||
in_uint16_be(c->in_s, cmd);
|
||||
in_uint16_be(in_s, cmd);
|
||||
|
||||
if (cmd == 2) /* connection denied */
|
||||
{
|
||||
in_uint16_be(c->in_s, dim);
|
||||
in_uint16_be(in_s, dim);
|
||||
|
||||
if (s->errstr != 0)
|
||||
{
|
||||
@ -440,14 +451,14 @@ _scp_v1c_check_response(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
return SCP_CLIENT_STATE_INTERNAL_ERR;
|
||||
}
|
||||
|
||||
in_uint8a(c->in_s, s->errstr, dim);
|
||||
in_uint8a(in_s, s->errstr, dim);
|
||||
(s->errstr)[dim] = '\0';
|
||||
|
||||
return SCP_CLIENT_STATE_CONNECTION_DENIED;
|
||||
}
|
||||
else if (cmd == 3) /* resend usr/pwd */
|
||||
{
|
||||
in_uint16_be(c->in_s, dim);
|
||||
in_uint16_be(in_s, dim);
|
||||
|
||||
if (s->errstr != 0)
|
||||
{
|
||||
@ -461,14 +472,14 @@ _scp_v1c_check_response(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
return SCP_CLIENT_STATE_INTERNAL_ERR;
|
||||
}
|
||||
|
||||
in_uint8a(c->in_s, s->errstr, dim);
|
||||
in_uint8a(in_s, s->errstr, dim);
|
||||
(s->errstr)[dim] = '\0';
|
||||
|
||||
return SCP_CLIENT_STATE_RESEND_CREDENTIALS;
|
||||
}
|
||||
else if (cmd == 20) /* password change */
|
||||
{
|
||||
in_uint16_be(c->in_s, dim);
|
||||
in_uint16_be(in_s, dim);
|
||||
|
||||
if (s->errstr != 0)
|
||||
{
|
||||
@ -482,14 +493,14 @@ _scp_v1c_check_response(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
return SCP_CLIENT_STATE_INTERNAL_ERR;
|
||||
}
|
||||
|
||||
in_uint8a(c->in_s, s->errstr, dim);
|
||||
in_uint8a(in_s, s->errstr, dim);
|
||||
(s->errstr)[dim] = '\0';
|
||||
|
||||
return SCP_CLIENT_STATE_PWD_CHANGE_REQ;
|
||||
}
|
||||
else if (cmd == 30) /* display */
|
||||
{
|
||||
in_uint16_be(c->in_s, s->display);
|
||||
in_uint16_be(in_s, s->display);
|
||||
|
||||
return SCP_CLIENT_STATE_OK;
|
||||
}
|
||||
|
@ -32,32 +32,32 @@
|
||||
/* client API */
|
||||
/* 001 */
|
||||
enum SCP_CLIENT_STATES_E
|
||||
scp_v1c_connect(struct SCP_CONNECTION *c, struct SCP_SESSION *s);
|
||||
scp_v1c_connect(struct trans *t, struct SCP_SESSION *s);
|
||||
|
||||
/* 004 */
|
||||
enum SCP_CLIENT_STATES_E
|
||||
scp_v1c_resend_credentials(struct SCP_CONNECTION *c, struct SCP_SESSION *s);
|
||||
scp_v1c_resend_credentials(struct trans *t, struct SCP_SESSION *s);
|
||||
|
||||
/* 021 */
|
||||
enum SCP_CLIENT_STATES_E
|
||||
scp_v1c_pwd_change(struct SCP_CONNECTION *c, char *newpass);
|
||||
scp_v1c_pwd_change(struct trans *t, char *newpass);
|
||||
|
||||
/* 022 */
|
||||
enum SCP_CLIENT_STATES_E
|
||||
scp_v1c_pwd_change_cancel(struct SCP_CONNECTION *c);
|
||||
scp_v1c_pwd_change_cancel(struct trans *t);
|
||||
|
||||
/* 041 */
|
||||
enum SCP_CLIENT_STATES_E
|
||||
scp_v1c_get_session_list(struct SCP_CONNECTION *c, int *scount,
|
||||
scp_v1c_get_session_list(struct trans *t, int *scount,
|
||||
struct SCP_DISCONNECTED_SESSION **s);
|
||||
|
||||
/* 043 */
|
||||
enum SCP_CLIENT_STATES_E
|
||||
scp_v1c_select_session(struct SCP_CONNECTION *c, struct SCP_SESSION *s,
|
||||
scp_v1c_select_session(struct trans *t, struct SCP_SESSION *s,
|
||||
SCP_SID sid);
|
||||
|
||||
/* 044 */
|
||||
enum SCP_CLIENT_STATES_E
|
||||
scp_v1c_select_session_cancel(struct SCP_CONNECTION *c);
|
||||
scp_v1c_select_session_cancel(struct trans *t);
|
||||
|
||||
#endif
|
||||
|
@ -37,18 +37,17 @@
|
||||
//extern struct log_config* s_log;
|
||||
|
||||
static enum SCP_CLIENT_STATES_E
|
||||
_scp_v1c_mng_check_response(struct SCP_CONNECTION *c, struct SCP_SESSION *s);
|
||||
_scp_v1c_mng_check_response(struct trans *t, struct SCP_SESSION *s);
|
||||
|
||||
/* client API */
|
||||
/* 001 */
|
||||
enum SCP_CLIENT_STATES_E
|
||||
scp_v1c_mng_connect(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
scp_v1c_mng_connect(struct trans *t, struct SCP_SESSION *s)
|
||||
{
|
||||
tui8 sz;
|
||||
tui32 size;
|
||||
struct stream *out_s = t->out_s;
|
||||
|
||||
init_stream(c->out_s, c->out_s->size);
|
||||
init_stream(c->in_s, c->in_s->size);
|
||||
tui8 sz;
|
||||
int size;
|
||||
|
||||
size = (12 + 4 + g_strlen(s->hostname) + g_strlen(s->username) +
|
||||
g_strlen(s->password));
|
||||
@ -62,56 +61,60 @@ scp_v1c_mng_connect(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
size = size + 16;
|
||||
}
|
||||
|
||||
init_stream(out_s, size);
|
||||
|
||||
/* sending request */
|
||||
|
||||
/* header */
|
||||
out_uint32_be(c->out_s, 1); /* version */
|
||||
out_uint32_be(c->out_s, size);
|
||||
out_uint16_be(c->out_s, SCP_COMMAND_SET_MANAGE);
|
||||
out_uint16_be(c->out_s, SCP_CMD_MNG_LOGIN);
|
||||
out_uint32_be(out_s, 1); /* version */
|
||||
out_uint32_be(out_s, size);
|
||||
out_uint16_be(out_s, SCP_COMMAND_SET_MANAGE);
|
||||
out_uint16_be(out_s, SCP_CMD_MNG_LOGIN);
|
||||
|
||||
/* data */
|
||||
sz = g_strlen(s->username);
|
||||
out_uint8(c->out_s, sz);
|
||||
out_uint8p(c->out_s, s->username, sz);
|
||||
out_uint8(out_s, sz);
|
||||
out_uint8p(out_s, s->username, sz);
|
||||
sz = g_strlen(s->password);
|
||||
out_uint8(c->out_s, sz);
|
||||
out_uint8p(c->out_s, s->password, sz);
|
||||
out_uint8(out_s, sz);
|
||||
out_uint8p(out_s, s->password, sz);
|
||||
|
||||
/* address */
|
||||
out_uint8(c->out_s, s->addr_type);
|
||||
out_uint8(out_s, s->addr_type);
|
||||
|
||||
if (s->addr_type == SCP_ADDRESS_TYPE_IPV4)
|
||||
{
|
||||
out_uint32_be(c->out_s, s->ipv4addr);
|
||||
out_uint32_be(out_s, s->ipv4addr);
|
||||
}
|
||||
else
|
||||
{
|
||||
out_uint8p(c->out_s, s->ipv6addr, 16);
|
||||
out_uint8p(out_s, s->ipv6addr, 16);
|
||||
}
|
||||
|
||||
/* hostname */
|
||||
sz = g_strlen(s->hostname);
|
||||
out_uint8(c->out_s, sz);
|
||||
out_uint8p(c->out_s, s->hostname, sz);
|
||||
out_uint8(out_s, sz);
|
||||
out_uint8p(out_s, s->hostname, sz);
|
||||
|
||||
if (0 != scp_tcp_force_send(c->in_sck, c->out_s->data, size))
|
||||
if (0 != trans_force_write(t))
|
||||
{
|
||||
LOG(LOG_LEVEL_WARNING, "[v1c_mng:%d] connection aborted: network error", __LINE__);
|
||||
return SCP_CLIENT_STATE_NETWORK_ERR;
|
||||
}
|
||||
|
||||
/* wait for response */
|
||||
return _scp_v1c_mng_check_response(c, s);
|
||||
return _scp_v1c_mng_check_response(t, s);
|
||||
}
|
||||
|
||||
/* 004 */
|
||||
enum SCP_CLIENT_STATES_E
|
||||
scp_v1c_mng_get_session_list(struct SCP_CONNECTION *c, int *scount,
|
||||
scp_v1c_mng_get_session_list(struct trans *t, int *scount,
|
||||
struct SCP_DISCONNECTED_SESSION **s)
|
||||
{
|
||||
struct stream *in_s = t->in_s;
|
||||
struct stream *out_s = t->out_s;
|
||||
tui32 version = 1;
|
||||
tui32 size = 12;
|
||||
int size = 12;
|
||||
tui16 cmd = SCP_CMD_MNG_LIST_REQ; /* request session list */
|
||||
tui32 sescnt = 0; /* total session number */
|
||||
tui32 sestmp = 0; /* additional total session number */
|
||||
@ -123,15 +126,16 @@ scp_v1c_mng_get_session_list(struct SCP_CONNECTION *c, int *scount,
|
||||
struct SCP_DISCONNECTED_SESSION *ds = 0;
|
||||
// tui8 addr[16];
|
||||
|
||||
init_stream(c->out_s, c->out_s->size);
|
||||
init_stream(out_s, 64);
|
||||
|
||||
/* we request session list */
|
||||
out_uint32_be(c->out_s, version); /* version */
|
||||
out_uint32_be(c->out_s, size); /* size */
|
||||
out_uint16_be(c->out_s, SCP_COMMAND_SET_MANAGE); /* cmdset */
|
||||
out_uint16_be(c->out_s, cmd); /* cmd */
|
||||
out_uint32_be(out_s, version); /* version */
|
||||
out_uint32_be(out_s, size); /* size */
|
||||
out_uint16_be(out_s, SCP_COMMAND_SET_MANAGE); /* cmdset */
|
||||
out_uint16_be(out_s, cmd); /* cmd */
|
||||
s_mark_end(out_s);
|
||||
|
||||
if (0 != scp_tcp_force_send(c->in_sck, c->out_s->data, size))
|
||||
if (0 != trans_force_write(t))
|
||||
{
|
||||
LOG(LOG_LEVEL_WARNING, "[v1c_mng:%d] connection aborted: network error", __LINE__);
|
||||
return SCP_CLIENT_STATE_NETWORK_ERR;
|
||||
@ -140,16 +144,16 @@ scp_v1c_mng_get_session_list(struct SCP_CONNECTION *c, int *scount,
|
||||
do
|
||||
{
|
||||
/* then we wait for server response */
|
||||
init_stream(c->in_s, c->in_s->size);
|
||||
init_stream(in_s, 8);
|
||||
|
||||
if (0 != scp_tcp_force_recv(c->in_sck, c->in_s->data, 8))
|
||||
if (0 != trans_force_read(t, 8))
|
||||
{
|
||||
LOG(LOG_LEVEL_WARNING, "[v1c_mng:%d] connection aborted: network error", __LINE__);
|
||||
g_free(ds);
|
||||
return SCP_CLIENT_STATE_NETWORK_ERR;
|
||||
}
|
||||
|
||||
in_uint32_be(c->in_s, version);
|
||||
in_uint32_be(in_s, version);
|
||||
|
||||
if (version != 1)
|
||||
{
|
||||
@ -158,7 +162,7 @@ scp_v1c_mng_get_session_list(struct SCP_CONNECTION *c, int *scount,
|
||||
return SCP_CLIENT_STATE_VERSION_ERR;
|
||||
}
|
||||
|
||||
in_uint32_be(c->in_s, size);
|
||||
in_uint32_be(in_s, size);
|
||||
|
||||
if (size < 12)
|
||||
{
|
||||
@ -167,16 +171,16 @@ scp_v1c_mng_get_session_list(struct SCP_CONNECTION *c, int *scount,
|
||||
return SCP_CLIENT_STATE_SIZE_ERR;
|
||||
}
|
||||
|
||||
init_stream(c->in_s, c->in_s->size);
|
||||
init_stream(in_s, size);
|
||||
|
||||
if (0 != scp_tcp_force_recv(c->in_sck, c->in_s->data, size - 8))
|
||||
if (0 != trans_force_read(t, size - 8))
|
||||
{
|
||||
LOG(LOG_LEVEL_WARNING, "[v1c_mng:%d] connection aborted: network error", __LINE__);
|
||||
g_free(ds);
|
||||
return SCP_CLIENT_STATE_NETWORK_ERR;
|
||||
}
|
||||
|
||||
in_uint16_be(c->in_s, cmd);
|
||||
in_uint16_be(in_s, cmd);
|
||||
|
||||
if (cmd != SCP_COMMAND_SET_MANAGE)
|
||||
{
|
||||
@ -185,7 +189,7 @@ scp_v1c_mng_get_session_list(struct SCP_CONNECTION *c, int *scount,
|
||||
return SCP_CLIENT_STATE_SEQUENCE_ERR;
|
||||
}
|
||||
|
||||
in_uint16_be(c->in_s, cmd);
|
||||
in_uint16_be(in_s, cmd);
|
||||
|
||||
if (cmd != SCP_CMD_MNG_LIST) /* session list */
|
||||
{
|
||||
@ -197,7 +201,7 @@ scp_v1c_mng_get_session_list(struct SCP_CONNECTION *c, int *scount,
|
||||
if (firstpkt)
|
||||
{
|
||||
firstpkt = 0;
|
||||
in_uint32_be(c->in_s, sescnt);
|
||||
in_uint32_be(in_s, sescnt);
|
||||
sestmp = sescnt;
|
||||
|
||||
if (0 == sescnt)
|
||||
@ -220,38 +224,38 @@ scp_v1c_mng_get_session_list(struct SCP_CONNECTION *c, int *scount,
|
||||
}
|
||||
else
|
||||
{
|
||||
in_uint32_be(c->in_s, sestmp);
|
||||
in_uint32_be(in_s, sestmp);
|
||||
}
|
||||
|
||||
in_uint8(c->in_s, continued);
|
||||
in_uint8(c->in_s, pktcnt);
|
||||
in_uint8(in_s, continued);
|
||||
in_uint8(in_s, pktcnt);
|
||||
|
||||
for (idx = 0; idx < pktcnt; idx++)
|
||||
{
|
||||
in_uint32_be(c->in_s, (ds[totalcnt]).SID); /* session id */
|
||||
in_uint8(c->in_s, (ds[totalcnt]).type);
|
||||
in_uint16_be(c->in_s, (ds[totalcnt]).height);
|
||||
in_uint16_be(c->in_s, (ds[totalcnt]).width);
|
||||
in_uint8(c->in_s, (ds[totalcnt]).bpp);
|
||||
in_uint8(c->in_s, (ds[totalcnt]).idle_days);
|
||||
in_uint8(c->in_s, (ds[totalcnt]).idle_hours);
|
||||
in_uint8(c->in_s, (ds[totalcnt]).idle_minutes);
|
||||
in_uint32_be(in_s, (ds[totalcnt]).SID); /* session id */
|
||||
in_uint8(in_s, (ds[totalcnt]).type);
|
||||
in_uint16_be(in_s, (ds[totalcnt]).height);
|
||||
in_uint16_be(in_s, (ds[totalcnt]).width);
|
||||
in_uint8(in_s, (ds[totalcnt]).bpp);
|
||||
in_uint8(in_s, (ds[totalcnt]).idle_days);
|
||||
in_uint8(in_s, (ds[totalcnt]).idle_hours);
|
||||
in_uint8(in_s, (ds[totalcnt]).idle_minutes);
|
||||
|
||||
in_uint16_be(c->in_s, (ds[totalcnt]).conn_year);
|
||||
in_uint8(c->in_s, (ds[totalcnt]).conn_month);
|
||||
in_uint8(c->in_s, (ds[totalcnt]).conn_day);
|
||||
in_uint8(c->in_s, (ds[totalcnt]).conn_hour);
|
||||
in_uint8(c->in_s, (ds[totalcnt]).conn_minute);
|
||||
in_uint8(c->in_s, (ds[totalcnt]).addr_type);
|
||||
in_uint16_be(in_s, (ds[totalcnt]).conn_year);
|
||||
in_uint8(in_s, (ds[totalcnt]).conn_month);
|
||||
in_uint8(in_s, (ds[totalcnt]).conn_day);
|
||||
in_uint8(in_s, (ds[totalcnt]).conn_hour);
|
||||
in_uint8(in_s, (ds[totalcnt]).conn_minute);
|
||||
in_uint8(in_s, (ds[totalcnt]).addr_type);
|
||||
|
||||
if ((ds[totalcnt]).addr_type == SCP_ADDRESS_TYPE_IPV4)
|
||||
{
|
||||
in_uint32_be(c->in_s, (ds[totalcnt]).ipv4addr);
|
||||
in_uint32_be(in_s, (ds[totalcnt]).ipv4addr);
|
||||
}
|
||||
|
||||
if ((ds[totalcnt]).addr_type == SCP_ADDRESS_TYPE_IPV6)
|
||||
{
|
||||
in_uint8a(c->in_s, (ds[totalcnt]).ipv6addr, 16);
|
||||
in_uint8a(in_s, (ds[totalcnt]).ipv6addr, 16);
|
||||
}
|
||||
|
||||
totalcnt++;
|
||||
@ -362,23 +366,24 @@ scp_v1c_select_session_cancel(struct SCP_CONNECTION* c)
|
||||
}*/
|
||||
|
||||
static enum SCP_CLIENT_STATES_E
|
||||
_scp_v1c_mng_check_response(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
_scp_v1c_mng_check_response(struct trans *t, struct SCP_SESSION *s)
|
||||
{
|
||||
struct stream *in_s = t->in_s;
|
||||
tui32 version;
|
||||
tui32 size;
|
||||
int size;
|
||||
tui16 cmd;
|
||||
tui8 dim;
|
||||
char buf[257];
|
||||
|
||||
init_stream(c->in_s, c->in_s->size);
|
||||
init_stream(in_s, 8);
|
||||
|
||||
if (0 != scp_tcp_force_recv(c->in_sck, c->in_s->data, 8))
|
||||
if (0 != trans_force_read(t, 8))
|
||||
{
|
||||
LOG(LOG_LEVEL_WARNING, "[v1c_mng:%d] connection aborted: network error", __LINE__);
|
||||
return SCP_CLIENT_STATE_NETWORK_ERR;
|
||||
}
|
||||
|
||||
in_uint32_be(c->in_s, version);
|
||||
in_uint32_be(in_s, version);
|
||||
|
||||
if (version != 1)
|
||||
{
|
||||
@ -386,18 +391,18 @@ _scp_v1c_mng_check_response(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
return SCP_CLIENT_STATE_VERSION_ERR;
|
||||
}
|
||||
|
||||
in_uint32_be(c->in_s, size);
|
||||
in_uint32_be(in_s, size);
|
||||
|
||||
init_stream(c->in_s, c->in_s->size);
|
||||
init_stream(in_s, size - 8);
|
||||
|
||||
/* read the rest of the packet */
|
||||
if (0 != scp_tcp_force_recv(c->in_sck, c->in_s->data, size - 8))
|
||||
if (0 != trans_force_read(t, size - 8))
|
||||
{
|
||||
LOG(LOG_LEVEL_WARNING, "[v1c_mng:%d] connection aborted: network error", __LINE__);
|
||||
return SCP_CLIENT_STATE_NETWORK_ERR;
|
||||
}
|
||||
|
||||
in_uint16_be(c->in_s, cmd);
|
||||
in_uint16_be(in_s, cmd);
|
||||
|
||||
if (cmd != SCP_COMMAND_SET_MANAGE)
|
||||
{
|
||||
@ -405,7 +410,7 @@ _scp_v1c_mng_check_response(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
return SCP_CLIENT_STATE_SEQUENCE_ERR;
|
||||
}
|
||||
|
||||
in_uint16_be(c->in_s, cmd);
|
||||
in_uint16_be(in_s, cmd);
|
||||
|
||||
if (cmd == SCP_CMD_MNG_LOGIN_ALLOW) /* connection ok */
|
||||
{
|
||||
@ -414,9 +419,9 @@ _scp_v1c_mng_check_response(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
}
|
||||
else if (cmd == SCP_CMD_MNG_LOGIN_DENY) /* connection denied */
|
||||
{
|
||||
in_uint8(c->in_s, dim);
|
||||
in_uint8(in_s, dim);
|
||||
buf[dim] = '\0';
|
||||
in_uint8a(c->in_s, buf, dim);
|
||||
in_uint8a(in_s, buf, dim);
|
||||
scp_session_set_errstr(s, buf);
|
||||
|
||||
LOG(LOG_LEVEL_INFO, "[v1c_mng:%d] connection denied: %s", __LINE__, s->errstr);
|
||||
|
@ -32,7 +32,7 @@
|
||||
/* client API */
|
||||
/* 001 */
|
||||
enum SCP_CLIENT_STATES_E
|
||||
scp_v1c_mng_connect(struct SCP_CONNECTION *c, struct SCP_SESSION *s);
|
||||
scp_v1c_mng_connect(struct trans *t, struct SCP_SESSION *s);
|
||||
|
||||
/* 004 * /
|
||||
enum SCP_CLIENT_STATES_E
|
||||
@ -49,7 +49,7 @@ scp_v1c_pwd_change_cancel(struct SCP_CONNECTION* c);
|
||||
|
||||
/* 041 */
|
||||
enum SCP_CLIENT_STATES_E
|
||||
scp_v1c_mng_get_session_list(struct SCP_CONNECTION *c, int *scount,
|
||||
scp_v1c_mng_get_session_list(struct trans *t, int *scount,
|
||||
struct SCP_DISCONNECTED_SESSION **s);
|
||||
|
||||
#endif
|
||||
|
@ -80,9 +80,11 @@ enum SCP_SERVER_STATES_E
|
||||
scp_v1s_connection_error(struct trans *t, const char *error);
|
||||
|
||||
/* 040 */
|
||||
#if 0
|
||||
enum SCP_SERVER_STATES_E
|
||||
scp_v1s_list_sessions(struct SCP_CONNECTION *c, int sescnt,
|
||||
struct SCP_DISCONNECTED_SESSION *ds, SCP_SID *sid);
|
||||
#endif
|
||||
|
||||
enum SCP_SERVER_STATES_E
|
||||
scp_v1s_list_sessions40(struct trans *t);
|
||||
|
@ -37,7 +37,7 @@
|
||||
//extern struct log_config* s_log;
|
||||
|
||||
static enum SCP_SERVER_STATES_E
|
||||
_scp_v1s_mng_check_response(struct SCP_CONNECTION *c, struct SCP_SESSION *s);
|
||||
_scp_v1s_mng_check_response(struct trans *t, struct SCP_SESSION *s);
|
||||
|
||||
/**
|
||||
* Reads a uint8 followed by a string into a buffer
|
||||
@ -217,51 +217,56 @@ scp_v1s_mng_accept(struct trans *atrans, struct SCP_SESSION **s)
|
||||
|
||||
/* 002 */
|
||||
enum SCP_SERVER_STATES_E
|
||||
scp_v1s_mng_allow_connection(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
scp_v1s_mng_allow_connection(struct trans *t, struct SCP_SESSION *s)
|
||||
{
|
||||
init_stream(c->out_s, c->out_s->size);
|
||||
struct stream *out_s = t->out_s;
|
||||
init_stream(out_s, 64);
|
||||
|
||||
out_uint32_be(c->out_s, 1);
|
||||
out_uint32_be(out_s, 1);
|
||||
/* packet size: 4 + 4 + 2 + 2 */
|
||||
/* version + size + cmdset + cmd */
|
||||
out_uint32_be(c->out_s, 12);
|
||||
out_uint16_be(c->out_s, SCP_COMMAND_SET_MANAGE);
|
||||
out_uint16_be(c->out_s, SCP_CMD_MNG_LOGIN_ALLOW);
|
||||
out_uint32_be(out_s, 12);
|
||||
out_uint16_be(out_s, SCP_COMMAND_SET_MANAGE);
|
||||
out_uint16_be(out_s, SCP_CMD_MNG_LOGIN_ALLOW);
|
||||
s_mark_end(out_s);
|
||||
|
||||
if (0 != scp_tcp_force_send(c->in_sck, c->out_s->data, 12))
|
||||
if (0 != trans_write_copy(t))
|
||||
{
|
||||
return SCP_SERVER_STATE_NETWORK_ERR;
|
||||
}
|
||||
|
||||
return _scp_v1s_mng_check_response(c, s);
|
||||
return _scp_v1s_mng_check_response(t, s);
|
||||
}
|
||||
|
||||
/* 003 */
|
||||
enum SCP_SERVER_STATES_E
|
||||
scp_v1s_mng_deny_connection(struct SCP_CONNECTION *c, const char *reason)
|
||||
scp_v1s_mng_deny_connection(struct trans *t, const char *reason)
|
||||
{
|
||||
int rlen;
|
||||
|
||||
init_stream(c->out_s, c->out_s->size);
|
||||
struct stream *out_s = t->out_s;
|
||||
|
||||
/* forcing message not to exceed 64k */
|
||||
rlen = g_strlen(reason);
|
||||
|
||||
if (rlen > 65535)
|
||||
if (rlen > 65535 - 64)
|
||||
{
|
||||
rlen = 65535;
|
||||
rlen = 65535 - 64;
|
||||
}
|
||||
|
||||
out_uint32_be(c->out_s, 1);
|
||||
init_stream(out_s, rlen + 64);
|
||||
|
||||
out_uint32_be(out_s, 1);
|
||||
/* packet size: 4 + 4 + 2 + 2 + 2 + strlen(reason)*/
|
||||
/* version + size + cmdset + cmd + msglen + msg */
|
||||
out_uint32_be(c->out_s, rlen + 14);
|
||||
out_uint16_be(c->out_s, SCP_COMMAND_SET_MANAGE);
|
||||
out_uint16_be(c->out_s, SCP_CMD_MNG_LOGIN_DENY);
|
||||
out_uint16_be(c->out_s, rlen);
|
||||
out_uint8p(c->out_s, reason, rlen);
|
||||
out_uint32_be(out_s, rlen + 14);
|
||||
out_uint16_be(out_s, SCP_COMMAND_SET_MANAGE);
|
||||
out_uint16_be(out_s, SCP_CMD_MNG_LOGIN_DENY);
|
||||
out_uint16_be(out_s, rlen);
|
||||
out_uint8p(out_s, reason, rlen);
|
||||
s_mark_end(out_s);
|
||||
|
||||
if (0 != scp_tcp_force_send(c->in_sck, c->out_s->data, rlen + 14))
|
||||
if (0 != trans_write_copy(t))
|
||||
{
|
||||
return SCP_SERVER_STATE_NETWORK_ERR;
|
||||
}
|
||||
@ -271,7 +276,7 @@ scp_v1s_mng_deny_connection(struct SCP_CONNECTION *c, const char *reason)
|
||||
|
||||
/* 006 */
|
||||
enum SCP_SERVER_STATES_E
|
||||
scp_v1s_mng_list_sessions(struct SCP_CONNECTION *c, struct SCP_SESSION *s,
|
||||
scp_v1s_mng_list_sessions(struct trans *t, struct SCP_SESSION *s,
|
||||
int sescnt, struct SCP_DISCONNECTED_SESSION *ds)
|
||||
{
|
||||
tui32 version = 1;
|
||||
@ -283,6 +288,8 @@ scp_v1s_mng_list_sessions(struct SCP_CONNECTION *c, struct SCP_SESSION *s,
|
||||
int pidx;
|
||||
struct SCP_DISCONNECTED_SESSION *cds;
|
||||
|
||||
struct stream *out_s = t->out_s;
|
||||
|
||||
/* calculating the number of packets to send */
|
||||
if (sescnt == 0)
|
||||
{
|
||||
@ -301,33 +308,33 @@ scp_v1s_mng_list_sessions(struct SCP_CONNECTION *c, struct SCP_SESSION *s,
|
||||
for (idx = 0; idx < pktcnt; idx++)
|
||||
{
|
||||
/* ok, we send session session list */
|
||||
init_stream(c->out_s, c->out_s->size);
|
||||
init_stream(out_s, 64 + (SCP_SERVER_MAX_LIST_SIZE * 40));
|
||||
|
||||
/* size: ver+size+cmdset+cmd+sescnt+continue+count */
|
||||
size = 4 + 4 + 2 + 2 + 4 + 1 + 1;
|
||||
|
||||
/* header */
|
||||
s_push_layer(c->out_s, channel_hdr, 8);
|
||||
out_uint16_be(c->out_s, SCP_COMMAND_SET_MANAGE);
|
||||
out_uint16_be(c->out_s, cmd);
|
||||
s_push_layer(out_s, channel_hdr, 8);
|
||||
out_uint16_be(out_s, SCP_COMMAND_SET_MANAGE);
|
||||
out_uint16_be(out_s, cmd);
|
||||
|
||||
/* session count */
|
||||
out_uint32_be(c->out_s, sescnt);
|
||||
out_uint32_be(out_s, sescnt);
|
||||
|
||||
/* setting the continue flag */
|
||||
if ((idx + 1)*SCP_SERVER_MAX_LIST_SIZE >= sescnt)
|
||||
{
|
||||
out_uint8(c->out_s, 0);
|
||||
out_uint8(out_s, 0);
|
||||
/* setting session count for this packet */
|
||||
pidx = sescnt - (idx * SCP_SERVER_MAX_LIST_SIZE);
|
||||
out_uint8(c->out_s, pidx);
|
||||
out_uint8(out_s, pidx);
|
||||
}
|
||||
else
|
||||
{
|
||||
out_uint8(c->out_s, 1);
|
||||
out_uint8(out_s, 1);
|
||||
/* setting session count for this packet */
|
||||
pidx = SCP_SERVER_MAX_LIST_SIZE;
|
||||
out_uint8(c->out_s, pidx);
|
||||
out_uint8(out_s, pidx);
|
||||
}
|
||||
|
||||
/* adding session descriptors */
|
||||
@ -337,52 +344,53 @@ scp_v1s_mng_list_sessions(struct SCP_CONNECTION *c, struct SCP_SESSION *s,
|
||||
cds = ds + ((idx) * SCP_SERVER_MAX_LIST_SIZE) + sidx;
|
||||
|
||||
/* session data */
|
||||
out_uint32_be(c->out_s, cds->SID); /* session id */
|
||||
out_uint8(c->out_s, cds->type);
|
||||
out_uint16_be(c->out_s, cds->height);
|
||||
out_uint16_be(c->out_s, cds->width);
|
||||
out_uint8(c->out_s, cds->bpp);
|
||||
out_uint8(c->out_s, cds->idle_days);
|
||||
out_uint8(c->out_s, cds->idle_hours);
|
||||
out_uint8(c->out_s, cds->idle_minutes);
|
||||
out_uint32_be(out_s, cds->SID); /* session id */
|
||||
out_uint8(out_s, cds->type);
|
||||
out_uint16_be(out_s, cds->height);
|
||||
out_uint16_be(out_s, cds->width);
|
||||
out_uint8(out_s, cds->bpp);
|
||||
out_uint8(out_s, cds->idle_days);
|
||||
out_uint8(out_s, cds->idle_hours);
|
||||
out_uint8(out_s, cds->idle_minutes);
|
||||
size += 13;
|
||||
|
||||
out_uint16_be(c->out_s, cds->conn_year);
|
||||
out_uint8(c->out_s, cds->conn_month);
|
||||
out_uint8(c->out_s, cds->conn_day);
|
||||
out_uint8(c->out_s, cds->conn_hour);
|
||||
out_uint8(c->out_s, cds->conn_minute);
|
||||
out_uint8(c->out_s, cds->addr_type);
|
||||
out_uint16_be(out_s, cds->conn_year);
|
||||
out_uint8(out_s, cds->conn_month);
|
||||
out_uint8(out_s, cds->conn_day);
|
||||
out_uint8(out_s, cds->conn_hour);
|
||||
out_uint8(out_s, cds->conn_minute);
|
||||
out_uint8(out_s, cds->addr_type);
|
||||
size += 7;
|
||||
|
||||
if (cds->addr_type == SCP_ADDRESS_TYPE_IPV4)
|
||||
{
|
||||
in_uint32_be(c->out_s, cds->ipv4addr);
|
||||
in_uint32_be(out_s, cds->ipv4addr);
|
||||
size += 4;
|
||||
}
|
||||
else if (cds->addr_type == SCP_ADDRESS_TYPE_IPV6)
|
||||
{
|
||||
in_uint8a(c->out_s, cds->ipv6addr, 16);
|
||||
in_uint8a(out_s, cds->ipv6addr, 16);
|
||||
size += 16;
|
||||
}
|
||||
}
|
||||
|
||||
s_pop_layer(c->out_s, channel_hdr);
|
||||
out_uint32_be(c->out_s, version);
|
||||
out_uint32_be(c->out_s, size);
|
||||
s_mark_end(out_s);
|
||||
s_pop_layer(out_s, channel_hdr);
|
||||
out_uint32_be(out_s, version);
|
||||
out_uint32_be(out_s, size);
|
||||
|
||||
if (0 != scp_tcp_force_send(c->in_sck, c->out_s->data, size))
|
||||
if (0 != trans_force_write(t))
|
||||
{
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s_mng:%d] connection aborted: network error", __LINE__);
|
||||
return SCP_SERVER_STATE_NETWORK_ERR;
|
||||
}
|
||||
}
|
||||
|
||||
return _scp_v1s_mng_check_response(c, s);
|
||||
return _scp_v1s_mng_check_response(t, s);
|
||||
}
|
||||
|
||||
static enum SCP_SERVER_STATES_E
|
||||
_scp_v1s_mng_check_response(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
_scp_v1s_mng_check_response(struct trans *t, struct SCP_SESSION *s)
|
||||
{
|
||||
tui32 version;
|
||||
int size;
|
||||
@ -390,15 +398,17 @@ _scp_v1s_mng_check_response(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
// tui8 dim;
|
||||
// char buf[257];
|
||||
|
||||
init_stream(c->in_s, c->in_s->size);
|
||||
struct stream *in_s = t->in_s;
|
||||
|
||||
if (0 != scp_tcp_force_recv(c->in_sck, c->in_s->data, 8))
|
||||
init_stream(in_s, 64);
|
||||
|
||||
if (0 != trans_force_read(t, 8))
|
||||
{
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s_mng:%d] connection aborted: network error", __LINE__);
|
||||
return SCP_SERVER_STATE_NETWORK_ERR;
|
||||
}
|
||||
|
||||
in_uint32_be(c->in_s, version);
|
||||
in_uint32_be(in_s, version);
|
||||
|
||||
if (version != 1)
|
||||
{
|
||||
@ -406,7 +416,7 @@ _scp_v1s_mng_check_response(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
return SCP_SERVER_STATE_VERSION_ERR;
|
||||
}
|
||||
|
||||
in_uint32_be(c->in_s, size);
|
||||
in_uint32_be(in_s, size);
|
||||
|
||||
/* Check the message is big enough for the header, the command set, and
|
||||
* the command (but not too big) */
|
||||
@ -416,18 +426,16 @@ _scp_v1s_mng_check_response(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
return SCP_SERVER_STATE_SIZE_ERR;
|
||||
}
|
||||
|
||||
init_stream(c->in_s, size - 8);
|
||||
init_stream(in_s, size - 8);
|
||||
|
||||
/* read the rest of the packet */
|
||||
if (0 != scp_tcp_force_recv(c->in_sck, c->in_s->data, size - 8))
|
||||
if (0 != trans_force_read(t, size - 8))
|
||||
{
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s_mng:%d] connection aborted: network error", __LINE__);
|
||||
return SCP_SERVER_STATE_NETWORK_ERR;
|
||||
}
|
||||
|
||||
c->in_s->end = c->in_s->data + (size - 8);
|
||||
|
||||
in_uint16_be(c->in_s, cmd);
|
||||
in_uint16_be(in_s, cmd);
|
||||
|
||||
if (cmd != SCP_COMMAND_SET_MANAGE)
|
||||
{
|
||||
@ -435,7 +443,7 @@ _scp_v1s_mng_check_response(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
return SCP_SERVER_STATE_SEQUENCE_ERR;
|
||||
}
|
||||
|
||||
in_uint16_be(c->in_s, cmd);
|
||||
in_uint16_be(in_s, cmd);
|
||||
|
||||
if (cmd == SCP_CMD_MNG_LIST_REQ) /* request session list */
|
||||
{
|
||||
|
@ -50,7 +50,7 @@ scp_v1s_mng_accept(struct trans *atrans, struct SCP_SESSION **s);
|
||||
*/
|
||||
/* 002 */
|
||||
enum SCP_SERVER_STATES_E
|
||||
scp_v1s_mng_allow_connection(struct SCP_CONNECTION *c, struct SCP_SESSION *s);
|
||||
scp_v1s_mng_allow_connection(struct trans *atrans, struct SCP_SESSION *s);
|
||||
|
||||
/**
|
||||
*
|
||||
@ -61,7 +61,7 @@ scp_v1s_mng_allow_connection(struct SCP_CONNECTION *c, struct SCP_SESSION *s);
|
||||
*/
|
||||
/* 003 */
|
||||
enum SCP_SERVER_STATES_E
|
||||
scp_v1s_mng_deny_connection(struct SCP_CONNECTION *c, const char *reason);
|
||||
scp_v1s_mng_deny_connection(struct trans *atrans, const char *reason);
|
||||
|
||||
/**
|
||||
*
|
||||
@ -71,7 +71,7 @@ scp_v1s_mng_deny_connection(struct SCP_CONNECTION *c, const char *reason);
|
||||
*/
|
||||
/* 006 */
|
||||
enum SCP_SERVER_STATES_E
|
||||
scp_v1s_mng_list_sessions(struct SCP_CONNECTION *c, struct SCP_SESSION *s,
|
||||
scp_v1s_mng_list_sessions(struct trans *atrans, struct SCP_SESSION *s,
|
||||
int sescnt, struct SCP_DISCONNECTED_SESSION *ds);
|
||||
// SCP_SID* sid);
|
||||
|
||||
|
@ -51,19 +51,19 @@ scp_process(struct trans *t)
|
||||
{
|
||||
/* starts processing an scp v0 connection */
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "accept ok, go on with scp v0");
|
||||
scp_v0_process(t, sdata);
|
||||
result = scp_v0_process(t, sdata);
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "accept ok, go on with scp v1");
|
||||
scp_v1_process(t, sdata);
|
||||
result = scp_v1_process(t, sdata);
|
||||
}
|
||||
break;
|
||||
case SCP_SERVER_STATE_START_MANAGE:
|
||||
/* starting a management session */
|
||||
LOG(LOG_LEVEL_INFO,
|
||||
"starting a sesman management session...");
|
||||
scp_v1_mng_process_msg(t, sdata);
|
||||
result = scp_v1_mng_process_msg(t, sdata);
|
||||
break;
|
||||
case SCP_SERVER_STATE_VERSION_ERR:
|
||||
case SCP_SERVER_STATE_SIZE_ERR:
|
||||
|
@ -37,8 +37,8 @@ extern struct config_sesman *g_cfg; /* in sesman.c */
|
||||
static void parseCommonStates(enum SCP_SERVER_STATES_E e, const char *f);
|
||||
|
||||
/******************************************************************************/
|
||||
void
|
||||
scp_v1_mng_process(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
enum SCP_SERVER_STATES_E
|
||||
scp_v1_mng_process_msg(struct trans *atrans, struct SCP_SESSION *s)
|
||||
{
|
||||
long data;
|
||||
enum SCP_SERVER_STATES_E e;
|
||||
@ -51,24 +51,24 @@ scp_v1_mng_process(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
|
||||
if (!data)
|
||||
{
|
||||
scp_v1s_mng_deny_connection(c, "Login failed");
|
||||
scp_v1s_mng_deny_connection(atrans, "Login failed");
|
||||
LOG(LOG_LEVEL_INFO,
|
||||
"[MNG] Login failed for user %s. Connection terminated", s->username);
|
||||
auth_end(data);
|
||||
return;
|
||||
return SCP_SERVER_STATE_END;
|
||||
}
|
||||
|
||||
/* testing if login is allowed */
|
||||
if (0 == access_login_mng_allowed(s->username))
|
||||
{
|
||||
scp_v1s_mng_deny_connection(c, "Access to Terminal Server not allowed.");
|
||||
scp_v1s_mng_deny_connection(atrans, "Access to Terminal Server not allowed.");
|
||||
LOG(LOG_LEVEL_INFO,
|
||||
"[MNG] User %s not allowed on TS. Connection terminated", s->username);
|
||||
auth_end(data);
|
||||
return;
|
||||
return SCP_SERVER_STATE_END;
|
||||
}
|
||||
|
||||
e = scp_v1s_mng_allow_connection(c, s);
|
||||
e = scp_v1s_mng_allow_connection(atrans, s);
|
||||
|
||||
end = 1;
|
||||
|
||||
@ -89,7 +89,7 @@ scp_v1_mng_process(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
LOG(LOG_LEVEL_INFO, "No sessions on Terminal Server");
|
||||
}
|
||||
|
||||
e = scp_v1s_mng_list_sessions(c, s, scount, slist);
|
||||
e = scp_v1s_mng_list_sessions(atrans, s, scount, slist);
|
||||
g_free(slist);
|
||||
break;
|
||||
default:
|
||||
@ -102,12 +102,7 @@ scp_v1_mng_process(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
|
||||
/* cleanup */
|
||||
auth_end(data);
|
||||
}
|
||||
|
||||
void
|
||||
scp_v1_mng_process_msg(struct trans *atrans, struct SCP_SESSION *s)
|
||||
{
|
||||
// JAY TODO
|
||||
return SCP_SERVER_STATE_END;
|
||||
}
|
||||
|
||||
static void parseCommonStates(enum SCP_SERVER_STATES_E e, const char *f)
|
||||
|
@ -30,15 +30,11 @@
|
||||
/**
|
||||
*
|
||||
* @brief processes the stream using scp version 1
|
||||
* @param in_sck connection socket
|
||||
* @param in_s input stream
|
||||
* @param out_s output stream
|
||||
* @param atrans incoming transport
|
||||
* @param s incoming session details
|
||||
*
|
||||
*/
|
||||
void
|
||||
scp_v1_mng_process(struct SCP_CONNECTION *c, struct SCP_SESSION *s);
|
||||
|
||||
void
|
||||
enum SCP_SERVER_STATES_E
|
||||
scp_v1_mng_process_msg(struct trans *atrans, struct SCP_SESSION *s);
|
||||
|
||||
#endif
|
||||
|
@ -38,8 +38,8 @@ char cmnd[257];
|
||||
char serv[257];
|
||||
char port[257];
|
||||
|
||||
void cmndList(struct SCP_CONNECTION *c);
|
||||
void cmndKill(struct SCP_CONNECTION *c, struct SCP_SESSION *s);
|
||||
void cmndList(struct trans *t);
|
||||
void cmndKill(struct trans *t, struct SCP_SESSION *s);
|
||||
void cmndHelp(void);
|
||||
|
||||
int inputSession(struct SCP_SESSION *s);
|
||||
@ -48,7 +48,7 @@ unsigned int menuSelect(unsigned int choices);
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
struct SCP_SESSION *s;
|
||||
struct SCP_CONNECTION *c;
|
||||
struct trans *t;
|
||||
enum SCP_CLIENT_STATES_E e;
|
||||
//int end;
|
||||
int idx;
|
||||
@ -136,7 +136,7 @@ int main(int argc, char **argv)
|
||||
}
|
||||
|
||||
s = scp_session_create();
|
||||
c = scp_connection_create(sock);
|
||||
t = scp_trans_create(sock);
|
||||
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "Connecting to %s:%s with user %s (%s)", serv, port, user, pass);
|
||||
|
||||
@ -151,7 +151,7 @@ int main(int argc, char **argv)
|
||||
scp_session_set_username(s, user);
|
||||
scp_session_set_password(s, pass);
|
||||
|
||||
e = scp_v1c_mng_connect(c, s);
|
||||
e = scp_v1c_mng_connect(t, s);
|
||||
|
||||
if (SCP_CLIENT_STATE_OK != e)
|
||||
{
|
||||
@ -160,16 +160,16 @@ int main(int argc, char **argv)
|
||||
|
||||
if (0 == g_strncmp(cmnd, "list", 5))
|
||||
{
|
||||
cmndList(c);
|
||||
cmndList(t);
|
||||
}
|
||||
else if (0 == g_strncmp(cmnd, "kill:", 5))
|
||||
{
|
||||
cmndKill(c, s);
|
||||
cmndKill(t, s);
|
||||
}
|
||||
|
||||
g_tcp_close(sock);
|
||||
scp_session_destroy(s);
|
||||
scp_connection_destroy(c);
|
||||
trans_delete(t);
|
||||
log_end();
|
||||
|
||||
return 0;
|
||||
@ -203,14 +203,14 @@ print_session(const struct SCP_DISCONNECTED_SESSION *s)
|
||||
s->conn_minute);
|
||||
}
|
||||
|
||||
void cmndList(struct SCP_CONNECTION *c)
|
||||
void cmndList(struct trans *t)
|
||||
{
|
||||
struct SCP_DISCONNECTED_SESSION *dsl;
|
||||
enum SCP_CLIENT_STATES_E e;
|
||||
int scnt;
|
||||
int idx;
|
||||
|
||||
e = scp_v1c_mng_get_session_list(c, &scnt, &dsl);
|
||||
e = scp_v1c_mng_get_session_list(t, &scnt, &dsl);
|
||||
|
||||
if (e != SCP_CLIENT_STATE_LIST_OK)
|
||||
{
|
||||
@ -233,7 +233,7 @@ void cmndList(struct SCP_CONNECTION *c)
|
||||
g_free(dsl);
|
||||
}
|
||||
|
||||
void cmndKill(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
void cmndKill(struct trans *t, struct SCP_SESSION *s)
|
||||
{
|
||||
|
||||
}
|
||||
|
@ -37,7 +37,7 @@ int main(int argc, char **argv)
|
||||
{
|
||||
char buf[256];
|
||||
struct SCP_SESSION *s;
|
||||
struct SCP_CONNECTION *c;
|
||||
struct trans *t;
|
||||
/*struct SCP_DISCONNECTED_SESSION ds;*/
|
||||
struct SCP_DISCONNECTED_SESSION *dsl;
|
||||
enum SCP_CLIENT_STATES_E e;
|
||||
@ -62,7 +62,7 @@ int main(int argc, char **argv)
|
||||
}
|
||||
|
||||
s = scp_session_create();
|
||||
c = scp_connection_create(sock);
|
||||
t = scp_trans_create(sock);
|
||||
|
||||
if (0 != g_tcp_connect(sock, "localhost", "3350"))
|
||||
{
|
||||
@ -105,7 +105,7 @@ int main(int argc, char **argv)
|
||||
s.errstr=0;*/
|
||||
|
||||
end = 0;
|
||||
e = scp_v1c_connect(c, s);
|
||||
e = scp_v1c_connect(t, s);
|
||||
|
||||
while (!end)
|
||||
{
|
||||
@ -117,7 +117,7 @@ int main(int argc, char **argv)
|
||||
break;
|
||||
case SCP_CLIENT_STATE_SESSION_LIST:
|
||||
g_printf("OK : session list needed\n");
|
||||
e = scp_v1c_get_session_list(c, &scnt, &dsl);
|
||||
e = scp_v1c_get_session_list(t, &scnt, &dsl);
|
||||
break;
|
||||
case SCP_CLIENT_STATE_LIST_OK:
|
||||
g_printf("OK : selecting a session:\n");
|
||||
@ -131,7 +131,7 @@ int main(int argc, char **argv)
|
||||
}
|
||||
|
||||
sel = menuSelect(scnt);
|
||||
e = scp_v1c_select_session(c, s, dsl[sel - 1].SID);
|
||||
e = scp_v1c_select_session(t, s, dsl[sel - 1].SID);
|
||||
g_printf("\n return: %d \n", e);
|
||||
break;
|
||||
case SCP_CLIENT_STATE_RESEND_CREDENTIALS:
|
||||
@ -152,7 +152,7 @@ int main(int argc, char **argv)
|
||||
}
|
||||
|
||||
scp_session_set_password(s, buf);
|
||||
e = scp_v1c_resend_credentials(c, s);
|
||||
e = scp_v1c_resend_credentials(t, s);
|
||||
break;
|
||||
case SCP_CLIENT_STATE_CONNECTION_DENIED:
|
||||
g_printf("ERR: connection denied: %s\n", s->errstr);
|
||||
@ -175,7 +175,7 @@ int main(int argc, char **argv)
|
||||
|
||||
g_tcp_close(sock);
|
||||
scp_session_destroy(s);
|
||||
scp_connection_destroy(c);
|
||||
trans_delete(t);
|
||||
/*free_stream(c.in_s);
|
||||
free_stream(c.out_s);*/
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user