Merge pull request #581 from ArvidNorr/errorcode

Errorcode
This commit is contained in:
Marc-André Moreau 2012-05-07 04:37:25 -07:00
commit f142ac29d6
6 changed files with 86 additions and 2 deletions

View File

@ -0,0 +1,39 @@
/*
* File: errorcodes.h
* Author: Arvid
*
* Created on April 13, 2012, 9:09 AM
*/
#ifndef ERRORCODES_H
#define ERRORCODES_H
#ifdef __cplusplus
extern "C" {
#endif
/**
* This static variable holds an error code if the return value from connect is false.
* This variable is always set to 0 in the beginning of the connect sequence.
* The returned code can be used to inform the user of the detailed connect error.
* The value can hold one of the defined error codes below OR an error according to errno
*/
extern int connectErrorCode ;
#define ERRORSTART 10000
#define PREECONNECTERROR ERRORSTART + 1
#define UNDEFINEDCONNECTERROR ERRORSTART + 2
#define POSTCONNECTERROR ERRORSTART + 3
#define DNSERROR ERRORSTART + 4 /* general DNS ERROR */
#define DNSNAMENOTFOUND ERRORSTART + 5 /* EAI_NONAME */
#define CONNECTERROR ERRORSTART + 6 /* a connect error if errno is not define during tcp connect */
#define MCSCONNECTINITIALERROR ERRORSTART + 7
#define TLSCONNECTERROR ERRORSTART + 8
#define AUTHENTICATIONERROR ERRORSTART + 9
#ifdef __cplusplus
}
#endif
#endif /* ERRORCODES_H */

View File

@ -39,6 +39,7 @@ typedef struct rdp_freerdp_peer freerdp_peer;
#include <freerdp/input.h>
#include <freerdp/update.h>
#include <freerdp/errorcodes.h>
#ifdef __cplusplus
extern "C" {

View File

@ -107,6 +107,9 @@ boolean rdp_client_connect(rdpRdp* rdp)
if (mcs_send_connect_initial(rdp->mcs) != true)
{
if(!connectErrorCode){
connectErrorCode = MCSCONNECTINITIALERROR;
}
printf("Error: unable to send MCS Connect Initial\n");
return false;
}

View File

@ -28,6 +28,8 @@
#include <freerdp/freerdp.h>
#include <freerdp/utils/memory.h>
/* connectErrorCode is 'extern' in errorcodes.h. See comment there.*/
/** Creates a new connection based on the settings found in the "instance" parameter
* It will use the callbacks registered on the structure to process the pre/post connect operations
* that the caller requires.
@ -43,6 +45,8 @@ boolean freerdp_connect(freerdp* instance)
{
rdpRdp* rdp;
boolean status = false;
/* We always set the return code to 0 before we start the connect sequence*/
connectErrorCode = 0 ;
rdp = instance->context->rdp;
@ -52,6 +56,9 @@ boolean freerdp_connect(freerdp* instance)
if (status != true)
{
if(!connectErrorCode){
connectErrorCode = PREECONNECTERROR;
}
printf("freerdp_pre_connect failed\n");
return false;
}
@ -74,6 +81,9 @@ boolean freerdp_connect(freerdp* instance)
if (status != true)
{
printf("freerdp_post_connect failed\n");
if(!connectErrorCode){
connectErrorCode = POSTCONNECTERROR;
}
return false;
}
@ -109,7 +119,9 @@ boolean freerdp_connect(freerdp* instance)
return true;
}
}
if(!connectErrorCode){
connectErrorCode = UNDEFINEDCONNECTERROR;
}
return status;
}

View File

@ -25,6 +25,7 @@
#include <freerdp/utils/stream.h>
#include <freerdp/utils/memory.h>
#include <freerdp/utils/hexdump.h>
#include <freerdp/errorcodes.h>
#include <time.h>
#include <errno.h>
@ -88,6 +89,9 @@ boolean transport_connect_tls(rdpTransport* transport)
transport->tls->sockfd = transport->tcp->sockfd;
if (tls_connect(transport->tls) != true) {
if(!connectErrorCode){
connectErrorCode = TLSCONNECTERROR;
}
tls_free(transport->tls);
transport->tls = NULL;
return false;
@ -108,6 +112,9 @@ boolean transport_connect_nla(rdpTransport* transport)
transport->tls->sockfd = transport->tcp->sockfd;
if (tls_connect(transport->tls) != true) {
if(!connectErrorCode){
connectErrorCode = TLSCONNECTERROR;
}
tls_free(transport->tls);
transport->tls = NULL;
return false;
@ -126,6 +133,9 @@ boolean transport_connect_nla(rdpTransport* transport)
if (credssp_authenticate(transport->credssp) < 0)
{
if(!connectErrorCode){
connectErrorCode = AUTHENTICATIONERROR;
}
printf("Authentication failure, check credentials.\n"
"If credentials are valid, the NTLMSSP implementation may be to blame.\n");

View File

@ -19,6 +19,7 @@
#include <freerdp/utils/tcp.h>
#include <freerdp/utils/print.h>
#include <freerdp/errorcodes.h>
#include <stdio.h>
#include <stdlib.h>
@ -55,6 +56,9 @@
#endif
/* connectErrorCode is 'extern' in errorcodes.h. See comment there.*/
int connectErrorCode ;
int freerdp_tcp_connect(const char* hostname, int port)
{
int status;
@ -73,6 +77,14 @@ int freerdp_tcp_connect(const char* hostname, int port)
if (status != 0)
{
if(status==EAI_NONAME){
if(!connectErrorCode){
connectErrorCode = DNSNAMENOTFOUND;
}
}
if(!connectErrorCode){
connectErrorCode = DNSERROR;
}
printf("tcp_connect: getaddrinfo (%s)\n", gai_strerror(status));
return -1;
}
@ -90,7 +102,14 @@ int freerdp_tcp_connect(const char* hostname, int port)
printf("connected to %s:%s\n", hostname, servname);
break;
}
if(!connectErrorCode){
int tmperror = errno ;
if(tmperror!=0){
connectErrorCode = tmperror ;
}else{
connectErrorCode = CONNECTERROR;
}
}
close(sockfd);
sockfd = -1;
}