Exemple #1
0
/*
 * Checks the file request response.
 */
BOOL PeerFileAccept (Connection *peer, UWORD ackstatus, UDWORD port)
{
    Connection *flist, *fpeer;
    
    flist = PeerFileCreate (peer->serv);
    fpeer = ServerFindChild (flist->serv, peer->cont, TYPE_FILEDIRECT);
    
    if (!flist || !fpeer || !port || (ackstatus == TCP_ACK_REFUSE))
    {
        if (fpeer)
            TCPClose (fpeer);

        return 0;
    }

    ASSERT_MSGDIRECT(peer);
    ASSERT_FILELISTEN(flist);
    ASSERT_FILEDIRECT(fpeer);
    
    fpeer->connect  = 0;
    fpeer->oscar_dc_seq  = 0;
    fpeer->port     = port;
    fpeer->ip       = peer->ip;
    s_repl (&fpeer->server, s_ip (fpeer->ip));
    
    if (prG->verbose)
        rl_printf (i18n (2520, "Opening file transfer connection to %s:%s%ld%s... \n"),
                  s_wordquote (fpeer->server), COLQUOTE, UD2UL (fpeer->port), COLNONE);

    TCPDispatchConn (fpeer);
    
    return 1;
}
/*
 * Handle kill character
 */
static void rl_key_kill (void)
{
    rl_goto (0);
    rl_linecompress (&rl_temp, 0, -1);
    s_repl (&rl_yank, rl_temp.txt);
    rl_tab_state = 0;
    rl_tab_len = 0;
    rl_key_cut ();
}
Exemple #3
0
/*
 * Handles an incoming file request.
 */
UBYTE PeerFileIncAccept (Connection *list, Event *event)
{
    Connection *flist, *fpeer;
    Server *serv;
    Contact *cont;
    UDWORD opt_bytes, opt_acc;
    const char *opt_files;

    if (!OptGetVal (event->opt, CO_BYTES, &opt_bytes))
        opt_bytes = 0;
    if (!OptGetStr (event->opt, CO_MSGTEXT, &opt_files))
        opt_files = "";

    ASSERT_MSGLISTEN(list);
    
    serv  = list->serv;
    cont  = event->cont;
    flist = PeerFileCreate (serv);

    if ((event->wait && !OptGetVal (event->wait->opt, CO_FILEACCEPT, &opt_acc))
        || !opt_acc || !cont || !flist
        || !(fpeer = ServerChild (flist->serv, cont, TYPE_FILEDIRECT)))
    {
        const char *txt;
        if (!OptGetStr (event->wait->opt, CO_REFUSE, &txt))
            txt = "";
        IMIntMsgFat (cont, NOW, ims_offline, INT_FILE_REJING, txt, opt_files, 0, 0);
        return FALSE;
    }
    ASSERT_FILELISTEN (flist);
    ASSERT_FILEDIRECT (fpeer);
    
    fpeer->port      = 0;
    fpeer->ip        = 0;
    fpeer->connect   = 0;
    fpeer->version   = serv->oscar_dc->version;
    s_repl (&fpeer->server, NULL);
    fpeer->oscar_file_len       = opt_bytes;
    fpeer->oscar_file_done      = 0;

    IMIntMsgFat (cont, NOW, ims_offline, INT_FILE_ACKING, "", opt_files, 0, opt_bytes);
    
    return TRUE;
}
Exemple #4
0
io_err_t io_any_appendbuf (Connection *conn, Dispatcher *d, const char *buf, size_t count)
{
    char *newbuf;
    conn->connect |= CONNECT_SELECT_W;
    DebugH (DEB_TCP, "conn %p append %ld to %ld", conn, (long int)count, (long int)d->outlen);
    if (!count)
        return IO_OK;
    if (d->outlen)
        newbuf = realloc (d->outbuf, d->outlen + count);
    else
        newbuf = malloc (count);
    if (!newbuf)
    {
        s_repl (&d->lasterr, "");
        return IO_NO_MEM;
    }
    memcpy (newbuf + d->outlen, buf, count);
    d->outlen += count;
    d->outbuf = newbuf;
    return IO_OK;
}
/*
 * "Logs in" TCP connection by opening listening socket.
 */
Event *RemoteOpen (Connection *remo)
{
    s_repl (&remo->server, s_realpath (remo->pref_server));

    rl_printf (i18n (2223, "Opening scripting FIFO at %s... "), s_wordquote (remo->server));

    remo->connect     = 0;
    remo->our_seq     = 0;
    remo->open        = &RemoteOpen;
    remo->dispatch    = &RemoteDispatch;
    remo->reconnect   = NULL;
    remo->close       = &RemoteClose;
    remo->our_session = 0;
    remo->ip          = 0;
    remo->port        = 0;

    UtilIOConnectF (remo);
    
    if (remo->connect)
        remo->connect = CONNECT_OK | CONNECT_SELECT_R;
    return NULL;
}