server: move nego process to connection module.

This commit is contained in:
Vic Lee 2011-08-19 09:54:43 +08:00
parent 720860b581
commit 601254727f
5 changed files with 51 additions and 47 deletions

View File

@ -108,3 +108,45 @@ boolean rdp_client_connect(rdpRdp* rdp)
return True; return True;
} }
boolean rdp_server_accept_nego(rdpRdp* rdp, STREAM* s)
{
if (!nego_recv_request(rdp->nego, s))
return False;
if (rdp->nego->requested_protocols == PROTOCOL_RDP)
{
printf("Standard RDP encryption is not supported.\n");
return False;
}
printf("Requested protocols:");
if ((rdp->nego->requested_protocols | PROTOCOL_TLS))
{
printf(" TLS");
if (rdp->settings->tls_security)
{
printf("(Y)");
rdp->nego->selected_protocol |= PROTOCOL_TLS;
}
else
printf("(n)");
}
if ((rdp->nego->requested_protocols | PROTOCOL_NLA))
{
printf(" NLA");
if (rdp->settings->nla_security)
{
printf("(Y)");
rdp->nego->selected_protocol |= PROTOCOL_NLA;
}
else
printf("(n)");
}
printf("\n");
nego_send_negotiation_response(rdp->nego);
rdp->state = CONNECTION_STATE_NEGO;
return True;
}

View File

@ -39,4 +39,6 @@ enum CONNECTION_STATE
boolean rdp_client_connect(rdpRdp* rdp); boolean rdp_client_connect(rdpRdp* rdp);
boolean rdp_server_accept_nego(rdpRdp* rdp, STREAM* s);
#endif /* __CONNECTION_H */ #endif /* __CONNECTION_H */

View File

@ -23,7 +23,7 @@ static boolean freerdp_peer_initialize(freerdp_peer* client)
{ {
rdpPeer* peer = (rdpPeer*)client->peer; rdpPeer* peer = (rdpPeer*)client->peer;
peer->state = CONNECTION_STATE_INITIAL; peer->rdp->state = CONNECTION_STATE_INITIAL;
return True; return True;
} }
@ -53,59 +53,19 @@ static boolean freerdp_peer_check_fds(freerdp_peer* client)
return True; return True;
} }
static int peer_process_connection_nego(rdpPeer* peer, STREAM* s)
{
if (!nego_recv_request(peer->rdp->nego, s))
return -1;
if (peer->rdp->nego->requested_protocols == PROTOCOL_RDP)
{
printf("Standard RDP encryption is not supported.\n");
return -1;
}
printf("Requested protocols:");
if ((peer->rdp->nego->requested_protocols | PROTOCOL_TLS))
{
printf(" TLS");
if (peer->rdp->settings->tls_security)
{
printf("(Y)");
peer->rdp->nego->selected_protocol |= PROTOCOL_TLS;
}
else
printf("(n)");
}
if ((peer->rdp->nego->requested_protocols | PROTOCOL_NLA))
{
printf(" NLA");
if (peer->rdp->settings->nla_security)
{
printf("(Y)");
peer->rdp->nego->selected_protocol |= PROTOCOL_NLA;
}
else
printf("(n)");
}
printf("\n");
nego_send_negotiation_response(peer->rdp->nego);
peer->state = CONNECTION_STATE_NEGO;
return 1;
}
static int peer_recv_callback(rdpTransport* transport, STREAM* s, void* extra) static int peer_recv_callback(rdpTransport* transport, STREAM* s, void* extra)
{ {
rdpPeer* peer = (rdpPeer*)extra; rdpPeer* peer = (rdpPeer*)extra;
switch (peer->state) switch (peer->rdp->state)
{ {
case CONNECTION_STATE_INITIAL: case CONNECTION_STATE_INITIAL:
return peer_process_connection_nego(peer, s); if (!rdp_server_accept_nego(peer->rdp, s))
return -1;
break;
default: default:
printf("Invalid state %d\n", peer->state); printf("Invalid state %d\n", peer->rdp->state);
return -1; return -1;
} }

View File

@ -30,7 +30,6 @@ struct rdp_peer
freerdp_peer* client; freerdp_peer* client;
rdpRdp* rdp; rdpRdp* rdp;
int state;
}; };
#endif /* __PEER */ #endif /* __PEER */

View File

@ -115,6 +115,7 @@ struct rdp_rdp
{ {
boolean licensed; boolean licensed;
boolean activated; boolean activated;
int state;
struct rdp_mcs* mcs; struct rdp_mcs* mcs;
struct rdp_nego* nego; struct rdp_nego* nego;
struct rdp_input* input; struct rdp_input* input;