mirror of https://github.com/FreeRDP/FreeRDP
client: update to use args utils
This commit is contained in:
parent
6a13313c50
commit
67dca12b77
|
@ -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);
|
||||
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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*);
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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++;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue