Ejemplo n.º 1
0
GaimXfer *irc_dccsend_new_xfer(GaimConnection *gc, const char *who) {
	GaimXfer *xfer;
	struct irc_xfer_send_data *xd;

	/* Build the file transfer handle */
	xfer = gaim_xfer_new(gaim_connection_get_account(gc), GAIM_XFER_SEND, who);
	if (xfer)
	{
		xd = g_new0(struct irc_xfer_send_data, 1);
		xd->fd = -1;
		xfer->data = xd;

		/* Setup our I/O op functions */
		gaim_xfer_set_init_fnc(xfer, irc_dccsend_send_init);
		gaim_xfer_set_write_fnc(xfer, irc_dccsend_send_write);
		gaim_xfer_set_end_fnc(xfer, irc_dccsend_send_destroy);
		gaim_xfer_set_request_denied_fnc(xfer, irc_dccsend_send_destroy);
		gaim_xfer_set_cancel_send_fnc(xfer, irc_dccsend_send_destroy);
	}

	return xfer;
}
Ejemplo n.º 2
0
/**
 * Gaim calls this function when the user selects Send File from the
 * buddy menu
 * It sets up the GaimXfer struct and tells Gaim to go ahead
 */
void gaym_dccsend_send_file(GaimConnection *gc, const char *who, const char *file) {
	GaimXfer *xfer;
	struct gaym_xfer_send_data *xd;

	/* Build the file transfer handle */
	xfer = gaim_xfer_new(gaim_connection_get_account(gc), GAIM_XFER_SEND, who);


	xd = g_new0(struct gaym_xfer_send_data, 1);
	xd->fd = -1;
	xfer->data = xd;

	 /* Setup our I/O op functions */
	gaim_xfer_set_init_fnc(xfer, gaym_dccsend_send_init);
	gaim_xfer_set_write_fnc(xfer, gaym_dccsend_send_write);
	gaim_xfer_set_end_fnc(xfer, gaym_dccsend_send_destroy);
	gaim_xfer_set_request_denied_fnc(xfer, gaym_dccsend_send_destroy);
	gaim_xfer_set_cancel_send_fnc(xfer, gaym_dccsend_send_destroy);
	/* Now perform the request */
	if (file)
		gaim_xfer_request_accepted(xfer, file);
	else
		gaim_xfer_request(xfer);
}
Ejemplo n.º 3
0
Archivo: si.c Proyecto: VoxOx/VoxOx
GaimXfer *jabber_si_new_xfer(GaimConnection *gc, const char *who)
{
	JabberStream *js;

	GaimXfer *xfer;
	JabberSIXfer *jsx;

	js = gc->proto_data;

	xfer = gaim_xfer_new(gc->account, GAIM_XFER_SEND, who);
	if (xfer)
	{
		xfer->data = jsx = g_new0(JabberSIXfer, 1);
		jsx->js = js;

		gaim_xfer_set_init_fnc(xfer, jabber_si_xfer_init);
		gaim_xfer_set_cancel_send_fnc(xfer, jabber_si_xfer_cancel_send);
		gaim_xfer_set_end_fnc(xfer, jabber_si_xfer_end);

		js->file_transfers = g_list_append(js->file_transfers, xfer);
	}

	return xfer;
}
Ejemplo n.º 4
0
/* This function makes the necessary arrangements for receiving files */
void irc_dccsend_recv(struct irc_conn *irc, const char *from, const char *msg) {
	GaimXfer *xfer;
	struct irc_xfer_rx_data *xd;
	gchar **token;
	struct in_addr addr;
	GString *filename;
	int i = 0;
	guint32 nip;

	token = g_strsplit(msg, " ", 0);
	if (!token[0] || !token[1] || !token[2]) {
		g_strfreev(token);
		return;
	}

	filename = g_string_new("");
	if (token[0][0] == '"') {
		if (!strchr(&(token[0][1]), '"')) {
			g_string_append(filename, &(token[0][1]));
			for (i = 1; token[i]; i++)
				if (!strchr(token[i], '"')) {
					g_string_append_printf(filename, " %s", token[i]);
				} else {
					g_string_append_len(filename, token[i], strlen(token[i]) - 1);
					break;
				}
		} else {
			g_string_append_len(filename, &(token[0][1]), strlen(&(token[0][1])) - 1);
		}
	} else {
		g_string_append(filename, token[0]);
	}

	if (!token[i] || !token[i+1] || !token[i+2]) {
		g_strfreev(token);
		g_string_free(filename, TRUE);
		return;
	}
	i++;

	xfer = gaim_xfer_new(irc->account, GAIM_XFER_RECEIVE, from);
	if (xfer)
	{
		xd = g_new0(struct irc_xfer_rx_data, 1);
		xfer->data = xd;

		gaim_xfer_set_filename(xfer, filename->str);
		xfer->remote_port = atoi(token[i+1]);

		nip = strtoul(token[i], NULL, 10);
		if (nip) {
			addr.s_addr = htonl(nip);
			xd->ip = g_strdup(inet_ntoa(addr));
		} else {
			xd->ip = g_strdup(token[i]);
		}
		gaim_debug(GAIM_DEBUG_INFO, "irc", "Receiving file from %s\n",
				   xd->ip);
		gaim_xfer_set_size(xfer, token[i+2] ? atoi(token[i+2]) : 0);
		
		gaim_xfer_set_init_fnc(xfer, irc_dccsend_recv_init);
		gaim_xfer_set_ack_fnc(xfer, irc_dccsend_recv_ack);
		
		gaim_xfer_set_end_fnc(xfer, irc_dccsend_recv_destroy);
		gaim_xfer_set_request_denied_fnc(xfer, irc_dccsend_recv_destroy);
		gaim_xfer_set_cancel_send_fnc(xfer, irc_dccsend_recv_destroy);
		
		gaim_xfer_request(xfer);
	}
	g_strfreev(token);
	g_string_free(filename, TRUE);
}