| |
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ |
| |
2 /* vim:expandtab:shiftwidth=4:tabstop=4: |
| |
3 */ |
| |
4 /* This Source Code Form is subject to the terms of the Mozilla Public |
| |
5 * License, v. 2.0. If a copy of the MPL was not distributed with this |
| |
6 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
| |
7 |
| |
8 #include <stdio.h> |
| |
9 #include <stdlib.h> |
| |
10 #include <string.h> |
| |
11 #include <plgetopt.h> |
| |
12 #include "XRemoteClient.h" |
| |
13 |
| |
14 static void print_usage(void); |
| |
15 |
| |
16 int main(int argc, char **argv) |
| |
17 { |
| |
18 nsresult rv; |
| |
19 XRemoteClient client; |
| |
20 char *browser = 0; |
| |
21 char *profile = 0; |
| |
22 char *username = 0; |
| |
23 char *command = 0; |
| |
24 |
| |
25 if (argc < 2) { |
| |
26 print_usage(); |
| |
27 return 4; |
| |
28 } |
| |
29 |
| |
30 PLOptStatus os; |
| |
31 PLOptState *opt = PL_CreateOptState(argc, argv, "ha:u:p:"); |
| |
32 while (PL_OPT_EOL != (os = PL_GetNextOpt(opt))) { |
| |
33 if (PL_OPT_BAD == os) { |
| |
34 print_usage(); |
| |
35 return 4; |
| |
36 } |
| |
37 |
| |
38 switch (opt->option) { |
| |
39 case 'h': |
| |
40 print_usage(); |
| |
41 return 4; |
| |
42 break; |
| |
43 case 'u': |
| |
44 username = strdup(opt->value); |
| |
45 break; |
| |
46 case 'a': |
| |
47 browser = strdup(opt->value); |
| |
48 break; |
| |
49 case 'p': |
| |
50 profile = strdup(opt->value); |
| |
51 break; |
| |
52 case 0: |
| |
53 command = strdup(opt->value); |
| |
54 default: |
| |
55 break; |
| |
56 } |
| |
57 } |
| |
58 |
| |
59 rv = client.Init(); |
| |
60 // failed to connect to the X server |
| |
61 if (NS_FAILED(rv)) |
| |
62 return 1; |
| |
63 |
| |
64 // send the command - it doesn't get any easier than this |
| |
65 bool success = false; |
| |
66 char *error = 0; |
| |
67 rv = client.SendCommand(browser, username, profile, command, nullptr, |
| |
68 &error, &success); |
| |
69 |
| |
70 // failed to send command |
| |
71 if (NS_FAILED(rv)) { |
| |
72 fprintf(stderr, "%s: Error: Failed to send command: ", argv[0]); |
| |
73 if (error) { |
| |
74 fprintf(stderr, "%s\n", error); |
| |
75 free(error); |
| |
76 } |
| |
77 else { |
| |
78 fprintf(stderr, "No error string reported..\n"); |
| |
79 } |
| |
80 |
| |
81 return 3; |
| |
82 } |
| |
83 |
| |
84 // no running window found |
| |
85 if (!success) { |
| |
86 fprintf(stderr, "%s: Error: Failed to find a running server.\n", argv[0]); |
| |
87 return 2; |
| |
88 } |
| |
89 |
| |
90 // else, everything is fine. |
| |
91 return 0; |
| |
92 } |
| |
93 |
| |
94 /* static */ |
| |
95 void print_usage(void) { |
| |
96 fprintf(stderr, "Usage: mozilla-xremote-client [-a firefox|thunderbird|mozilla|any]\n"); |
| |
97 fprintf(stderr, " [-u <username>]\n"); |
| |
98 fprintf(stderr, " [-p <profile>] COMMAND\n"); |
| |
99 } |