client: update to use args utils

This commit is contained in:
Marc-André Moreau 2011-07-28 11:09:51 -04:00
parent 6a13313c50
commit 67dca12b77
8 changed files with 49 additions and 200 deletions

View File

@ -17,198 +17,25 @@
* limitations under the License.
*/
#include <stdio.h>
#include <string.h>
#include "gdi.h"
#include "connection.h"
#include <freerdp/freerdp.h>
#include <freerdp/settings.h>
#include <freerdp/utils/memory.h>
#include <freerdp/utils/args.h>
rdpRdp* rdp;
freerdp* instance;
rdpSettings* settings;
#define PARAM_EQUALS(_param) (strcmp(_param, argv[*i]) == 0)
#define CHECK_VALUE_PRESENT(_msg) do { \
*i = *i + 1; \
if (*i == argc) \
{ printf(_msg "\n"); return False; } \
} while(0)
#define STRING_COPY(_str) do { \
settings->_str = xmalloc(strlen(argv[*i]) + 1); \
memcpy(settings->_str, argv[*i], strlen(argv[*i])); \
settings->_str[strlen(argv[*i])] = '\0'; \
} while(0)
boolean freerdp_process_params(int argc, char* argv[], rdpSettings* settings, int* i)
{
char* p;
if (argc < *i + 1)
{
if (*i == 1)
printf("no parameters specified.\n");
return False;
}
while (*i < argc)
{
if (PARAM_EQUALS("-a"))
{
CHECK_VALUE_PRESENT("missing server depth");
settings->color_depth = atoi(argv[*i]);
}
else if (strcmp("-u", argv[*i]) == 0)
{
CHECK_VALUE_PRESENT("missing username");
STRING_COPY(username);
}
else if (PARAM_EQUALS("-p"))
{
CHECK_VALUE_PRESENT("missing password");
STRING_COPY(password);
}
else if (PARAM_EQUALS("-d"))
{
CHECK_VALUE_PRESENT("missing domain");
STRING_COPY(domain);
}
else if (PARAM_EQUALS("-g"))
{
CHECK_VALUE_PRESENT("missing screen dimensions");
settings->width = strtol(argv[*i], &p, 10);
if (*p == 'x')
settings->height = strtol(p + 1, &p, 10);
if ((settings->width < 16) || (settings->height < 16) ||
(settings->width > 4096) || (settings->height > 4096))
{
printf("invalid screen dimensions\n");
return False;
}
}
else if (PARAM_EQUALS("-n"))
{
CHECK_VALUE_PRESENT("missing hostname");
STRING_COPY(hostname);
}
else if (PARAM_EQUALS("-o"))
{
settings->console_audio = True;
}
else if (PARAM_EQUALS("-0"))
{
settings->console_session = True;
}
else if (PARAM_EQUALS("-z"))
{
settings->compression = True;
}
else if (PARAM_EQUALS("--sec"))
{
CHECK_VALUE_PRESENT("missing protocol security");
if (PARAM_EQUALS("rdp")) /* Standard RDP */
{
settings->rdp_security = 1;
settings->tls_security = 0;
settings->nla_security = 0;
}
else if (PARAM_EQUALS("tls")) /* TLS */
{
settings->rdp_security = 0;
settings->tls_security = 1;
settings->nla_security = 0;
}
else if (PARAM_EQUALS("nla")) /* NLA */
{
settings->rdp_security = 0;
settings->tls_security = 0;
settings->nla_security = 1;
}
else
{
printf("unknown protocol security\n");
return False;
}
}
else if (PARAM_EQUALS("-h") || PARAM_EQUALS("--help"))
{
printf("help\n");
return False;
}
else if (argv[*i][0] != '-')
{
if (argv[*i][0] == '[' && (p = strchr(argv[*i], ']'))
&& (p[1] == 0 || (p[1] == ':' && !strchr(p + 2, ':'))))
{
/* Either "[...]" or "[...]:..." with at most one : after the brackets */
settings->hostname = (char*) xmalloc(strlen(argv[*i]) + 1);
strncpy(settings->hostname, argv[*i] + 1, strlen(argv[*i] + 1));
if ((p = strchr((const char*)settings->hostname, ']')))
{
*p = 0;
if (p[1] == ':')
settings->port = (uint16) atoi(p + 2);
}
}
else
{
/* Port number is cut off and used if exactly one : in the string */
settings->hostname = (char*) xmalloc(strlen(argv[*i]) + 1);
strncpy(settings->hostname, argv[*i], strlen(argv[*i]));
settings->hostname[strlen(argv[*i])] = '\0';
if ((p = strchr(settings->hostname, ':')) && !strchr(p + 1, ':'))
{
*p = 0;
settings->port = (uint16) atoi(p + 1);
}
}
/*
* server hostname is the last argument for the current session.
* arguments followed will be parsed for the next session.
*/
*i = *i + 1;
return True;
}
*i = *i + 1;
}
return True;
}
int main(int argc, char* argv[])
{
int index = 1;
instance = freerdp_new();
settings = instance->settings;
rdp = (rdpRdp*) instance->rdp;
if (freerdp_process_params(argc, argv, settings, &index) != True)
{
printf("failed to process parameters.\n");
return 0;
}
freerdp_parse_args(settings, argc, argv, NULL, NULL, NULL, NULL);
gdi_init(instance, 0);
rdp_client_connect(rdp);
instance->Connect(instance);
freerdp_free(instance);

View File

@ -124,11 +124,6 @@ int main(int argc, char* argv[])
add_list_suite();
add_license_suite();
add_stream_suite();
add_utils_suite();
add_transport_suite();
//add_chanman_suite();
//add_cliprdr_suite();
//add_drdynvc_suite();
}
else
{
@ -168,15 +163,15 @@ int main(int argc, char* argv[])
}
else if (strcmp("chanman", argv[*pindex]) == 0)
{
//add_chanman_suite();
add_chanman_suite();
}
else if (strcmp("cliprdr", argv[*pindex]) == 0)
{
//add_cliprdr_suite();
add_cliprdr_suite();
}
else if (strcmp("drdynvc", argv[*pindex]) == 0)
{
//add_drdynvc_suite();
add_drdynvc_suite();
}
else if (strcmp("per", argv[*pindex]) == 0)
{

View File

@ -1892,6 +1892,8 @@ void test_gdi_FillRect(void)
HGDI_BRUSH hBrush;
HGDI_BITMAP hBitmap;
GDI_COLOR color;
GDI_COLOR pixel;
GDI_COLOR rawPixel;
int x, y;
int badPixels;
@ -1926,9 +1928,12 @@ void test_gdi_FillRect(void)
{
for (y = 0; y < height; y++)
{
rawPixel = gdi_GetPixel(hdc, x, y);
pixel = gdi_get_color_32bpp(hdc, rawPixel);
if (gdi_PtInRect(hRect, x, y))
{
if (gdi_GetPixel(hdc, x, y) == color) {
if (pixel == color) {
goodPixels++;
}
else {
@ -1938,7 +1943,7 @@ void test_gdi_FillRect(void)
}
else
{
if (gdi_GetPixel(hdc, x, y) == color) {
if (pixel == color) {
badPixels++;
}
else {

View File

@ -126,8 +126,8 @@ void test_args(void)
{
char* argv_c[] =
{
"-a", "8", "-u", "testuser", "-d", "testdomain", "-g", "640x480", "address1:3389",
"-a", "16", "-u", "testuser", "-d", "testdomain", "-g", "1280x960", "address2:3390"
"freerdp", "-a", "8", "-u", "testuser", "-d", "testdomain", "-g", "640x480", "address1:3389",
"freerdp", "-a", "16", "-u", "testuser", "-d", "testdomain", "-g", "1280x960", "address2:3390"
};
char** argv = argv_c;
int argc = sizeof(argv_c) / sizeof(char*);

View File

@ -37,6 +37,7 @@ FREERDP_API void freerdp_global_finish();
typedef struct rdp_freerdp freerdp;
typedef boolean (*pcConnect)(freerdp* freerdp);
typedef int (*pcChannelDataInput)(freerdp* freerdp, int channelId, uint8* data, int size);
struct rdp_freerdp
@ -46,9 +47,12 @@ struct rdp_freerdp
void* param2;
void* param3;
void* param4;
rdpInput* input;
rdpUpdate* update;
rdpSettings* settings;
pcConnect Connect;
pcChannelDataInput ChannelDataInput;
};

View File

@ -20,10 +20,16 @@
#include "rdp.h"
#include "input.h"
#include "update.h"
#include "connection.h"
#include <freerdp/freerdp.h>
#include <freerdp/utils/memory.h>
boolean freerdp_connect(freerdp* instance)
{
return rdp_client_connect((rdpRdp*) instance->rdp);
}
freerdp* freerdp_new()
{
freerdp* instance;
@ -37,6 +43,8 @@ freerdp* freerdp_new()
instance->input = rdp->input;
instance->update = rdp->update;
instance->settings = rdp->settings;
instance->Connect = freerdp_connect;
}
return instance;

View File

@ -22,6 +22,8 @@
typedef void (*pSetPixel32_ROP2)(uint32 *pixel, uint32 *pen);
uint32 gdi_get_color_32bpp(HGDI_DC hdc, GDI_COLOR color);
int FillRect_32bpp(HGDI_DC hdc, HGDI_RECT rect, HGDI_BRUSH hbr);
int BitBlt_32bpp(HGDI_DC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, HGDI_DC hdcSrc, int nXSrc, int nYSrc, int rop);
int PatBlt_32bpp(HGDI_DC hdc, int nXLeft, int nYLeft, int nWidth, int nHeight, int rop);

View File

@ -42,11 +42,11 @@ int freerdp_parse_args(rdpSettings* settings, int argc, char** argv,
ProcessPluginArgs plugin_callback, void* plugin_user_data,
ProcessUIArgs ui_callback, void* ui_user_data)
{
int index = 0;
int num_extensions = 0;
int i, j;
int t;
char* p;
int i, j;
int index = 1;
int num_extensions = 0;
FRDP_PLUGIN_DATA plugin_data[MAX_PLUGIN_DATA + 1];
while (index < argc)
@ -134,7 +134,8 @@ int freerdp_parse_args(rdpSettings* settings, int argc, char** argv,
}
else
{
ui_callback(settings, "-g", p, ui_user_data);
if (ui_callback != NULL)
ui_callback(settings, "-g", p, ui_user_data);
}
}
else if (strcmp("-t", argv[index]) == 0)
@ -305,8 +306,12 @@ int freerdp_parse_args(rdpSettings* settings, int argc, char** argv,
i++;
}
}
if (!plugin_callback(settings, argv[t], plugin_data, plugin_user_data))
return 0;
if (plugin_callback != NULL)
{
if (!plugin_callback(settings, argv[t], plugin_data, plugin_user_data))
return 0;
}
}
else if (strcmp("--ext", argv[index]) == 0)
{
@ -375,14 +380,17 @@ int freerdp_parse_args(rdpSettings* settings, int argc, char** argv,
}
else
{
t = ui_callback(settings, argv[index], (index + 1 < argc && argv[index + 1][0] != '-' ?
argv[index + 1] : NULL), ui_user_data);
if (t == 0)
if (ui_callback != NULL)
{
printf("invalid option: %s\n", argv[index]);
return 0;
t = ui_callback(settings, argv[index], (index + 1 < argc && argv[index + 1][0] != '-' ?
argv[index + 1] : NULL), ui_user_data);
if (t == 0)
{
printf("invalid option: %s\n", argv[index]);
return 0;
}
index += t - 1;
}
index += t - 1;
}
index++;
}