3480
+ 鐃緒申��申鐃緒申 1 /*
+ 鐃緒申��申鐃緒申 2 * gaim-remote
+ 鐃緒申��申鐃緒申 3 *
+ 鐃緒申��申鐃緒申 4 * Copyright (C) 2002, Sean Egan <bj91704@binghamton.edu>
+ 鐃緒申��申鐃緒申 5 *
+ 鐃緒申��申鐃緒申 6 * This program is free software; you can redistribute it and/or modify
+ 鐃緒申��申鐃緒申 7 * it under the terms of the GNU General Public License as published by
+ 鐃緒申��申鐃緒申 8 * the Free Software Foundation; either version 2 of the License, or
+ 鐃緒申��申鐃緒申 9 * (at your option) any later version.
+ 鐃緒申��申鐃緒申 10 *
+ 鐃緒申��申鐃緒申 11 * This program is distributed in the hope that it will be useful,
+ 鐃緒申��申鐃緒申 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ 鐃緒申��申鐃緒申 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ 鐃緒申��申鐃緒申 14 * GNU General Public License for more details.
+ 鐃緒申��申鐃緒申 15 *
+ 鐃緒申��申鐃緒申 16 * You should have received a copy of the GNU General Public License
+ 鐃緒申��申鐃緒申 17 * along with this program; if not, write to the Free Software
+ 鐃緒申��申鐃緒申 18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 鐃緒申��申鐃緒申 19 *
+ 鐃緒申��申鐃緒申 20 */
+ 鐃緒申��申鐃緒申 21
+ 鐃緒申��申鐃緒申 22 #include "gaim.h"
3533
+ 鐃緒申��申鐃緒申 23 #include <getopt.h>
3480
+ 鐃緒申��申鐃緒申 24 #include "gaim-socket.h"
+ 鐃緒申��申鐃緒申 25
+ 鐃緒申��申鐃緒申 26 void show_remote_usage(char *name)
+ 鐃緒申��申鐃緒申 27 {
+ 鐃緒申��申鐃緒申 28 printf(_("Usage: %s command [OPTIONS] [URI]\n\n"
+ 鐃緒申��申鐃緒申 29
+ 鐃緒申��申鐃緒申 30 " COMMANDS:\n"
+ 鐃緒申��申鐃緒申 31 " uri Handle AIM:// URI\n"
+ 鐃緒申��申鐃緒申 32 " info Show information about connected accounts\n"
+ 鐃緒申��申鐃緒申 33 " list Print buddy list\n"
+ 鐃緒申��申鐃緒申 34 " ison Show presence state of your buddy\n"
+ 鐃緒申��申鐃緒申 35 " convo Open a new conversation window\n"
+ 鐃緒申��申鐃緒申 36 " send Send message\n"
+ 鐃緒申��申鐃緒申 37 " add Add buddy to buddy list\n"
3559
+ 鐃緒申��申鐃緒申 38 " remove Remove buddy from list\n"
+ 鐃緒申��申鐃緒申 39 " quit Close running copy of Gaim\n\n"
3480
+ 鐃緒申��申鐃緒申 40
+ 鐃緒申��申鐃緒申 41 " OPTIONS:\n"
+ 鐃緒申��申鐃緒申 42 " -m, --message=MESG Message to send or show in conversation window\n"
+ 鐃緒申��申鐃緒申 43 " -t, --to=SCREENNAME Select a target for command\n"
+ 鐃緒申��申鐃緒申 44 " -p, --protocol=PROTO Specify protocol to use\n"
+ 鐃緒申��申鐃緒申 45 " -f, --from=SCREENNAME Specify screenname to use\n"
+ 鐃緒申��申鐃緒申 46 " -q, --quiet Send message without showing a conversation\n"
+ 鐃緒申��申鐃緒申 47 " window\n"
+ 鐃緒申��申鐃緒申 48 " -h, --help Show help for command\n"), name);
+ 鐃緒申��申鐃緒申 49 return;
+ 鐃緒申��申鐃緒申 50 }
+ 鐃緒申��申鐃緒申 51
+ 鐃緒申��申鐃緒申 52 static struct option longopts[] = {
+ 鐃緒申��申鐃緒申 53 {"message", required_argument, NULL, 'm'},
+ 鐃緒申��申鐃緒申 54 {"to", required_argument, NULL, 't'},
+ 鐃緒申��申鐃緒申 55 {"protocol",required_argument, NULL, 'p'},
+ 鐃緒申��申鐃緒申 56 {"from", required_argument, NULL, 'f'},
+ 鐃緒申��申鐃緒申 57 {"quiet", no_argument, NULL, 'q'},
+ 鐃緒申��申鐃緒申 58 {"help", no_argument, NULL, 'h'},
+ 鐃緒申��申鐃緒申 59 {0,0,0,0}
+ 鐃緒申��申鐃緒申 60 };
+ 鐃緒申��申鐃緒申 61
+ 鐃緒申��申鐃緒申 62 struct remoteopts {
+ 鐃緒申��申鐃緒申 63 char *command;
+ 鐃緒申��申鐃緒申 64 char *uri;
+ 鐃緒申��申鐃緒申 65 gboolean help, quiet;
+ 鐃緒申��申鐃緒申 66 char *message, *to, *from;
+ 鐃緒申��申鐃緒申 67 int protocol;
+ 鐃緒申��申鐃緒申 68 };
+ 鐃緒申��申鐃緒申 69
+ 鐃緒申��申鐃緒申 70
+ 鐃緒申��申鐃緒申 71 struct remoteopts opts;
+ 鐃緒申��申鐃緒申 72 int get_options(int argc, char *argv[])
+ 鐃緒申��申鐃緒申 73 {
+ 鐃緒申��申鐃緒申 74 int i;
+ 鐃緒申��申鐃緒申 75 memset(&opts, 0, sizeof(opts));
+ 鐃緒申��申鐃緒申 76 opts.protocol = -1;
+ 鐃緒申��申鐃緒申 77 while ((i=getopt_long(argc, argv, "m:t:p:f:qh", longopts, NULL)) != -1) {
+ 鐃緒申��申鐃緒申 78 switch (i) {
+ 鐃緒申��申鐃緒申 79 case 'm':
+ 鐃緒申��申鐃緒申 80 opts.message = optarg;
+ 鐃緒申��申鐃緒申 81 break;
+ 鐃緒申��申鐃緒申 82 case 't':
+ 鐃緒申��申鐃緒申 83 opts.to = optarg;
+ 鐃緒申��申鐃緒申 84 break;
+ 鐃緒申��申鐃緒申 85 case 'p':
+ 鐃緒申��申鐃緒申 86 /* Do stuff here. */
+ 鐃緒申��申鐃緒申 87 break;
+ 鐃緒申��申鐃緒申 88 case 'f':
+ 鐃緒申��申鐃緒申 89 opts.from = optarg;
+ 鐃緒申��申鐃緒申 90 break;
+ 鐃緒申��申鐃緒申 91 case 'q':
+ 鐃緒申��申鐃緒申 92 opts.quiet = TRUE;
+ 鐃緒申��申鐃緒申 93 break;
+ 鐃緒申��申鐃緒申 94 case 'h':
+ 鐃緒申��申鐃緒申 95 opts.help = TRUE;
+ 鐃緒申��申鐃緒申 96 break;
+ 鐃緒申��申鐃緒申 97 }
+ 鐃緒申��申鐃緒申 98 }
+ 鐃緒申��申鐃緒申 99
+ 鐃緒申��申鐃緒申 100 /* We must have non getopt'ed argument-- the command */
+ 鐃緒申��申鐃緒申 101 if (optind < argc)
+ 鐃緒申��申鐃緒申 102 opts.command = g_strdup(argv[optind++]);
+ 鐃緒申��申鐃緒申 103 else
+ 鐃緒申��申鐃緒申 104 return 1;
+ 鐃緒申��申鐃緒申 105
+ 鐃緒申��申鐃緒申 106 /* And we can have another argument--the URI. */
+ 鐃緒申��申鐃緒申 107 if (optind < argc) {
+ 鐃緒申��申鐃緒申 108 /* but only if we're using the uri command. */
+ 鐃緒申��申鐃緒申 109 if (!strcmp(opts.command, "uri"))
+ 鐃緒申��申鐃緒申 110 opts.uri = g_strdup(argv[optind++]);
+ 鐃緒申��申鐃緒申 111 else
+ 鐃緒申��申鐃緒申 112 return 1;
+ 鐃緒申��申鐃緒申 113
+ 鐃緒申��申鐃緒申 114 /* and we can't have any others. */
+ 鐃緒申��申鐃緒申 115 if (optind < argc)
+ 鐃緒申��申鐃緒申 116 return 1;
+ 鐃緒申��申鐃緒申 117 }
+ 鐃緒申��申鐃緒申 118
+ 鐃緒申��申鐃緒申 119 return 0;
+ 鐃緒申��申鐃緒申 120 }
+ 鐃緒申��申鐃緒申 121
+ 鐃緒申��申鐃緒申 122
+ 鐃緒申��申鐃緒申 123 int command_uri() {
+ 鐃緒申��申鐃緒申 124 int fd = 0;
+ 鐃緒申��申鐃緒申 125 struct gaim_cui_packet *p = NULL;
+ 鐃緒申��申鐃緒申 126 fd = gaim_connect_to_session(0);
+ 鐃緒申��申鐃緒申 127 if (!fd) {
+ 鐃緒申��申鐃緒申 128 fprintf(stderr, "Gaim not running (on session 0)\n");
+ 鐃緒申��申鐃緒申 129 return 1;
+ 鐃緒申��申鐃緒申 130 }
+ 鐃緒申��申鐃緒申 131 p = cui_packet_new(CUI_TYPE_REMOTE, CUI_REMOTE_URI);
+ 鐃緒申��申鐃緒申 132 cui_packet_append_string(p, opts.uri);
+ 鐃緒申��申鐃緒申 133 cui_send_packet (fd, p);
+ 鐃緒申��申鐃緒申 134 close(fd);
+ 鐃緒申��申鐃緒申 135 cui_packet_free(p);
+ 鐃緒申��申鐃緒申 136 return 0;
+ 鐃緒申��申鐃緒申 137 }
+ 鐃緒申��申鐃緒申 138
3559
+ 鐃緒申��申鐃緒申 139 int command_quit() {
+ 鐃緒申��申鐃緒申 140 int fd = 0;
+ 鐃緒申��申鐃緒申 141 struct gaim_cui_packet *p = NULL;
+ 鐃緒申��申鐃緒申 142 fd = gaim_connect_to_session(0);
+ 鐃緒申��申鐃緒申 143 if (!fd) {
+ 鐃緒申��申鐃緒申 144 fprintf(stderr, "Gaim not running (on session 0)\n");
+ 鐃緒申��申鐃緒申 145 return 1;
+ 鐃緒申��申鐃緒申 146 }
+ 鐃緒申��申鐃緒申 147 p = cui_packet_new(CUI_TYPE_META, CUI_META_QUIT);
+ 鐃緒申��申鐃緒申 148 cui_send_packet (fd, p);
+ 鐃緒申��申鐃緒申 149 close(fd);
+ 鐃緒申��申鐃緒申 150 cui_packet_free(p);
+ 鐃緒申��申鐃緒申 151 return 0;
+ 鐃緒申��申鐃緒申 152 }
+ 鐃緒申��申鐃緒申 153
3480
+ 鐃緒申��申鐃緒申 154 int command_info(){}
+ 鐃緒申��申鐃緒申 155
3559
+ 鐃緒申��申鐃緒申 156 int main (int argc, char *argv[])
3480
+ 鐃緒申��申鐃緒申 157 {
+ 鐃緒申��申鐃緒申 158
+ 鐃緒申��申鐃緒申 159 if (get_options(argc, argv)) {
+ 鐃緒申��申鐃緒申 160 show_remote_usage(argv[0]);
+ 鐃緒申��申鐃緒申 161 return 0;
+ 鐃緒申��申鐃緒申 162 }
+ 鐃緒申��申鐃緒申 163
+ 鐃緒申��申鐃緒申 164
+ 鐃緒申��申鐃緒申 165 if (!strcmp(opts.command, "uri")) {
+ 鐃緒申��申鐃緒申 166 return command_uri();
+ 鐃緒申��申鐃緒申 167 } else if (!strcmp(opts.command, "info")) {
+ 鐃緒申��申鐃緒申 168 return command_info();
3559
+ 鐃緒申��申鐃緒申 169 } else if (!strcmp(opts.command, "quit")) {
+ 鐃緒申��申鐃緒申 170 return command_quit();
3480
+ 鐃緒申��申鐃緒申 171 } else {
+ 鐃緒申��申鐃緒申 172 show_remote_usage(argv[0]);
+ 鐃緒申��申鐃緒申 173 return 1;
+ 鐃緒申��申鐃緒申 174 }
+ 鐃緒申��申鐃緒申 175
+ 鐃緒申��申鐃緒申 176 return 0;
+ 鐃緒申��申鐃緒申 177 }