size_t inbufdata, inbufsize;
size_t curread, totalsize;
int freeing;
size_t inbufdata, inbufsize;
size_t curread, totalsize;
int freeing;
struct qcommand *queue;
struct transfer *transfer;
int state;
int ptclose; /* Close after transfer is complete */
int accepted; /* If false, we connected, otherwise, we accepted */
struct qcommand *queue;
struct transfer *transfer;
int state;
int ptclose; /* Close after transfer is complete */
int accepted; /* If false, we connected, otherwise, we accepted */
-#ifdef DCPP_MASQUERADE
- qstrf(peer->sk, "$Lock EXTENDEDPROTOCOLABCABCABCABCABCABC Pk=DCPLUSPLUS0.674ABCABC|");
-#else
- qstrf(peer->sk, "$Lock EXTENDEDPROTOCOLABCABCABCABCABCABC Pk=DOLDA%sABCABCABC|", VERSION);
-#endif
+ if(peer->dcppemu)
+ qstrf(peer->sk, "$Lock EXTENDEDPROTOCOLABCABCABCABCABCABC Pk=DCPLUSPLUS0.674ABCABC|");
+ else
+ qstrf(peer->sk, "$Lock EXTENDEDPROTOCOLABCABCABCABCABCABC Pk=DOLDA%sABCABCABC|", VERSION);
-#ifdef DCPP_MASQUERADE
- qstr(peer->sk, "$Supports MiniSlots XmlBZList ADCGet TTHL TTHF GetZBlock ZLIG |");
-#else
- qstr(peer->sk, "$Supports MiniSlots XmlBZList ADCGet TTHL TTHF GetZBlock ZLIG|");
-#endif
+ if(peer->dcppemu)
+ qstr(peer->sk, "$Supports MiniSlots XmlBZList ADCGet TTHL TTHF GetZBlock ZLIG |");
+ else
+ qstr(peer->sk, "$Supports MiniSlots XmlBZList ADCGet TTHL TTHF GetZBlock ZLIG|");
}
}
qstrf(sk, "<%s V:%s,M:%c,H:%i/%i/%i,S:%i>",
}
}
qstrf(sk, "<%s V:%s,M:%c,H:%i/%i/%i,S:%i>",
(tcpsock == NULL)?'P':'A',
hn1, hn2, hn3,
confgetint("transfer", "slots")
(tcpsock == NULL)?'P':'A',
hn1, hn2, hn3,
confgetint("transfer", "slots")
-#ifdef DCPP_MASQUERADE
- qstrf(sk, "$Supports UserCommand NoGetINFO NoHello UserIP2 TTHSearch GetZBlock |");
-#else
- qstrf(sk, "$Supports UserCommand NoGetINFO NoHello UserIP2 TTHSearch GetZBlock|");
-#endif
+ if(hub->dcppemu)
+ qstrf(sk, "$Supports UserCommand NoGetINFO NoHello UserIP2 TTHSearch GetZBlock |");
+ else
+ qstrf(sk, "$Supports UserCommand NoGetINFO NoHello UserIP2 TTHSearch GetZBlock|");
static void cmd_getpass(struct socket *sk, struct fnetnode *fn, char *cmd, char *args)
{
struct dchub *hub;
static void cmd_getpass(struct socket *sk, struct fnetnode *fn, char *cmd, char *args)
{
struct dchub *hub;
- for(arg = fn->args; arg != NULL; arg = arg->next)
- {
- if(!wcscmp(arg->key, L"password"))
- break;
- }
- if((arg == NULL) || ((mbspw = icwcstombs(arg->val, DCCHARSET)) == NULL))
+ pw = wpfind(fn->args, L"password");
+ if((pw == NULL) || ((mbspw = icwcstombs(pw, DCCHARSET)) == NULL))
static void cmd_mynick(struct socket *sk, struct dcpeer *peer, char *cmd, char *args)
{
struct dcexppeer *expect;
static void cmd_mynick(struct socket *sk, struct dcpeer *peer, char *cmd, char *args)
{
struct dcexppeer *expect;
peer->state = PEER_TRNS;
transferstartdl(peer->transfer, peer->sk);
peer->sk->readcb = (void (*)(struct socket *, void *))transread;
peer->state = PEER_TRNS;
transferstartdl(peer->transfer, peer->sk);
peer->sk->readcb = (void (*)(struct socket *, void *))transread;
peer->state = PEER_TRNS;
transferstartul(peer->transfer, peer->sk);
peer->sk->writecb = (void (*)(struct socket *, void *))transwrite;
peer->state = PEER_TRNS;
transferstartul(peer->transfer, peer->sk);
peer->sk->writecb = (void (*)(struct socket *, void *))transwrite;
static void cmd_filelength(struct socket *sk, struct dcpeer *peer, char *cmd, char *args)
{
int size;
static void cmd_filelength(struct socket *sk, struct dcpeer *peer, char *cmd, char *args)
{
int size;
if(peer->transfer->size != size)
{
transfersetsize(peer->transfer, size);
if(peer->transfer->size != size)
{
transfersetsize(peer->transfer, size);
static void cmd_error(struct socket *sk, struct dcpeer *peer, char *cmd, char *args)
{
static void cmd_error(struct socket *sk, struct dcpeer *peer, char *cmd, char *args)
{
if((peer->transfer != NULL) && (peer->transfer->dir == TRNSD_DOWN))
{
transferseterror(peer->transfer, TRNSE_NOTFOUND);
if((peer->transfer != NULL) && (peer->transfer->dir == TRNSD_DOWN))
{
transferseterror(peer->transfer, TRNSE_NOTFOUND);
} else if(fd >= 0) {
if((buf2 = icsmbstowcs(args, DCCHARSET, NULL)) != NULL)
transfersetpath(peer->transfer, buf2);
} else if(fd >= 0) {
if((buf2 = icsmbstowcs(args, DCCHARSET, NULL)) != NULL)
transfersetpath(peer->transfer, buf2);
if((node = resdcpath(args, DCCHARSET, '\\')) == NULL)
{
qstrf(sk, "$Error File not in share|");
if((node = resdcpath(args, DCCHARSET, '\\')) == NULL)
{
qstrf(sk, "$Error File not in share|");
} else if(fd >= 0) {
if((buf2 = icsmbstowcs(args, charset, NULL)) != NULL)
transfersetpath(peer->transfer, buf2);
} else if(fd >= 0) {
if((buf2 = icsmbstowcs(args, charset, NULL)) != NULL)
transfersetpath(peer->transfer, buf2);
if((node = resdcpath(p, charset, '\\')) == NULL)
{
qstr(sk, "$Error File not in cache|");
if((node = resdcpath(p, charset, '\\')) == NULL)
{
qstr(sk, "$Error File not in cache|");
} else if(fd >= 0) {
if((wbuf = icsmbstowcs(argv[1], "UTF-8", NULL)) != NULL)
transfersetpath(peer->transfer, wbuf);
} else if(fd >= 0) {
if((wbuf = icsmbstowcs(argv[1], "UTF-8", NULL)) != NULL)
transfersetpath(peer->transfer, wbuf);
if(!strncmp(argv[1], "TTH/", 4))
{
if((node = findbytth(argv[1] + 4)) == NULL)
if(!strncmp(argv[1], "TTH/", 4))
{
if((node = findbytth(argv[1] + 4)) == NULL)
if((start != 0) && ((start >= sb.st_size) || (lseek(fd, start, SEEK_SET) < 0)))
{
qstr(sk, "$Error Offset out of range|");
if((start != 0) && ((start >= sb.st_size) || (lseek(fd, start, SEEK_SET) < 0)))
{
qstr(sk, "$Error Offset out of range|");
peer->state = PEER_CMD;
synctigertree(&peer->tth);
restigertree(&peer->tth, buf);
peer->state = PEER_CMD;
synctigertree(&peer->tth);
restigertree(&peer->tth, buf);
inittigertree(&peer->tth);
handletthl(peer);
} else if(!strcmp(argv[0], "file")) {
inittigertree(&peer->tth);
handletthl(peer);
} else if(!strcmp(argv[0], "file")) {
peer->state = PEER_CMD;
endcompress(peer);
transfersetstate(transfer, TRNS_HS);
socksettos(peer->sk, confgetint("fnet", "fnptos"));
peer->state = PEER_CMD;
endcompress(peer);
transfersetstate(transfer, TRNS_HS);
socksettos(peer->sk, confgetint("fnet", "fnptos"));
new = smalloc(sizeof(*new));
memset(new, 0, sizeof(*new));
fn->data = new;
new = smalloc(sizeof(*new));
memset(new, 0, sizeof(*new));
fn->data = new;
if(hubsetnick(fn, fn->mynick))
fnetsetnick(fn, L"DoldaConnectUser-IN");
/* IN as in Invalid Nick */
if(hubsetnick(fn, fn->mynick))
fnetsetnick(fn, L"DoldaConnectUser-IN");
/* IN as in Invalid Nick */
sk->readcb = (void (*)(struct socket *, void *))peerread;
sk->errcb = (void (*)(struct socket *, int, void *))peererror;
sk->data = peer;
socksettos(sk, confgetint("fnet", "fnptos"));
putsock(sk);
sk->readcb = (void (*)(struct socket *, void *))peerread;
sk->errcb = (void (*)(struct socket *, int, void *))peererror;
sk->data = peer;
socksettos(sk, confgetint("fnet", "fnptos"));
putsock(sk);
newsk->errcb = (void (*)(struct socket *, int, void *))peererror;
newsk->data = peer;
socksettos(newsk, confgetint("fnet", "fnptos"));
newsk->errcb = (void (*)(struct socket *, int, void *))peererror;
newsk->data = peer;
socksettos(newsk, confgetint("fnet", "fnptos"));
- fprintf(fs, "<FileListing Version=\"1\" CID=\"%s\" Base=\"/\" Generator=\"%s\">\r\n", cidbuf, DCIDFULL);
+ if(confgetint("dc", "dcppemu"))
+ fprintf(fs, "<FileListing Version=\"1\" CID=\"%s\" Base=\"/\" Generator=\"DC++ 0.674\">\r\n", cidbuf);
+ else
+ fprintf(fs, "<FileListing Version=\"1\" CID=\"%s\" Base=\"/\" Generator=\"%s\">\r\n", cidbuf, "DoldaConnect" VERSION);
-#ifdef DCPP_MASQUERADE
- fprintf(fs, "</FileListing>");
-#else
- fprintf(fs, "</FileListing>\r\n");
-#endif
+ if(confgetint("dc", "dcppemu"))
+ fprintf(fs, "</FileListing>");
+ else
+ fprintf(fs, "</FileListing>\r\n");
+ if(peer->timeout != NULL)
+ canceltimer(peer->timeout);
+ peer->timeout = timercallback(ntime() + 180, (void (*)(int, void *))peertimeout, peer);
if(*qcmd->string == '$')
dispatchcommand(qcmd, peercmds, peer->sk, peer);
freeqcmd(qcmd);
if(*qcmd->string == '$')
dispatchcommand(qcmd, peercmds, peer->sk, peer);
freeqcmd(qcmd);
{CONF_VAR_STRING, "email", {.str = L"spam@spam.org"}},
{CONF_VAR_INT, "udpport", {.num = 0}},
{CONF_VAR_INT, "tcpport", {.num = 0}},
{CONF_VAR_STRING, "email", {.str = L"spam@spam.org"}},
{CONF_VAR_INT, "udpport", {.num = 0}},
{CONF_VAR_INT, "tcpport", {.num = 0}},