156 lines
3.0 KiB
C
156 lines
3.0 KiB
C
|
|
|
|
#include "arch.h"
|
|
#include "tcp.h"
|
|
#include "libscp.h"
|
|
#include "parse.h"
|
|
|
|
#include <stdio.h>
|
|
|
|
int inputSession(struct SCP_SESSION* s);
|
|
unsigned int menuSelect(unsigned int choices);
|
|
|
|
int main(int argc, char** argv)
|
|
{
|
|
struct SCP_SESSION s;
|
|
struct SCP_CONNECTION c;
|
|
enum SCP_CLIENT_STATES_E e;
|
|
int end;
|
|
|
|
make_stream(c.in_s);
|
|
init_stream(c.in_s, 8192);
|
|
make_stream(c.out_s);
|
|
init_stream(c.out_s, 8192);
|
|
c.in_sck = g_tcp_socket();
|
|
|
|
if (0!=g_tcp_connect(c.in_sck, "localhost", "3350"))
|
|
{
|
|
g_printf("error connecting");
|
|
return 1;
|
|
}
|
|
|
|
g_printf("001 - send connect request\n");
|
|
|
|
/*struct SCP_SESSION
|
|
{
|
|
uint16_t display;
|
|
char* errstr;
|
|
};*/
|
|
|
|
s.type=SCP_SESSION_TYPE_XVNC;
|
|
s.version=1;
|
|
s.height=600;
|
|
s.width=800;
|
|
s.bpp=8;
|
|
s.rsr=0;
|
|
g_strncpy(s.locale,"it_IT 0123456789",18);
|
|
|
|
s.username=g_malloc(256, 1);
|
|
g_strncpy(s.username,"prog",255);
|
|
|
|
s.password=g_malloc(256,1);
|
|
g_strncpy(s.password, "prog", 255);
|
|
g_printf("%s - %s\n", s.username, s.password);
|
|
|
|
|
|
s.hostname=g_malloc(256,1);
|
|
g_strncpy(s.hostname, "odin", 255);
|
|
|
|
s.addr_type=SCP_ADDRESS_TYPE_IPV4;
|
|
s.ipv4addr=0;
|
|
s.errstr=0;
|
|
|
|
end=0;
|
|
e=scp_v1c_connect(&c,&s);
|
|
|
|
while (!end)
|
|
{
|
|
switch (e)
|
|
{
|
|
case SCP_CLIENT_STATE_OK:
|
|
g_printf("OK : display is %d\n", (int)s.display);
|
|
end=1;
|
|
break;
|
|
case SCP_CLIENT_STATE_SESSION_LIST:
|
|
g_printf("OK : session list needed\n");
|
|
break;
|
|
case SCP_CLIENT_STATE_RESEND_CREDENTIALS:
|
|
g_printf("ERR: resend credentials - %s\n", s.errstr);
|
|
g_printf(" username:");
|
|
scanf("%255s", s.username);
|
|
g_printf(" password:");
|
|
scanf("%255s", s.password);
|
|
e=scp_v1c_resend_credentials(&c,&s);
|
|
break;
|
|
case SCP_CLIENT_STATE_CONNECTION_DENIED:
|
|
g_printf("ERR: connection denied: %s\n", s.errstr);
|
|
end=1;
|
|
break;
|
|
case SCP_CLIENT_STATE_PWD_CHANGE_REQ:
|
|
g_printf("OK : password change required\n");
|
|
break;
|
|
default:
|
|
g_printf("protocol error: %d\n", e);
|
|
end=1;
|
|
}
|
|
}
|
|
|
|
g_tcp_close(c.in_sck);
|
|
free_stream(c.in_s);
|
|
free_stream(c.out_s);
|
|
|
|
return 0;
|
|
}
|
|
|
|
int inputSession(struct SCP_SESSION* s)
|
|
{
|
|
unsigned int integer;
|
|
|
|
g_printf("username: ");
|
|
scanf("%255s", s->username);
|
|
g_printf("password:");
|
|
scanf("%255s", s->password);
|
|
g_printf("hostname:");
|
|
scanf("%255s", s->hostname);
|
|
|
|
g_printf("session type:\n");
|
|
g_printf("0: Xvnc\n", SCP_SESSION_TYPE_XVNC);
|
|
g_printf("1: x11rdp\n", SCP_SESSION_TYPE_XRDP);
|
|
integer=menuSelect(1);
|
|
if (integer==1)
|
|
{
|
|
s->type=SCP_SESSION_TYPE_XRDP;
|
|
}
|
|
else
|
|
{
|
|
s->type=SCP_SESSION_TYPE_XVNC;
|
|
}
|
|
|
|
s->version=1;
|
|
s->height=600;
|
|
s->width=800;
|
|
s->bpp=8;
|
|
|
|
/* fixed for now */
|
|
s->rsr=0;
|
|
g_strncpy(s->locale,"it_IT 0123456789",18);
|
|
|
|
return 0;
|
|
}
|
|
|
|
unsigned int menuSelect(unsigned int choices)
|
|
{
|
|
unsigned int sel;
|
|
int ret;
|
|
|
|
ret=scanf("%u", &sel);
|
|
|
|
while ((ret==0) || (sel > choices))
|
|
{
|
|
g_printf("invalid choice.");
|
|
scanf("%u", &sel);
|
|
}
|
|
|
|
return sel;
|
|
}
|