char *inbuf;
size_t inbufdata, inbufsize;
struct qcommand *queue;
- int extended;
+ int extended, dcppemu;
char *nativename;
char *nativenick;
};
int state;
int ptclose; /* Close after transfer is complete */
int accepted; /* If false, we connected, otherwise, we accepted */
- int extended;
+ int extended, dcppemu;
int direction; /* Using the constants from transfer.h */
int compress;
int hascurpos, fetchingtthl, notthl;
static void sendpeerlock(struct dcpeer *peer)
{
-#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);
}
static void sendsupports(struct dcpeer *peer)
{
-#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|");
}
static void requestfile(struct dcpeer *peer)
}
}
qstrf(sk, "<%s V:%s,M:%c,H:%i/%i/%i,S:%i>",
- DCIDTAG,
- DCIDTAGV,
+ (hub->dcppemu)?"++":"Dolda",
+ (hub->dcppemu)?"0.674":VERSION,
(tcpsock == NULL)?'P':'A',
hn1, hn2, hn3,
confgetint("transfer", "slots")
*(p++) = 0;
if(hub->extended)
{
-#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|");
}
key = dcmakekey(args);
qstrf(sk, "$Key %s|", key);
static void cmd_getpass(struct socket *sk, struct fnetnode *fn, char *cmd, char *args)
{
struct dchub *hub;
- struct wcspair *arg;
+ wchar_t *pw;
char *mbspw;
hub = fn->data;
- 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))
{
killfnetnode(fn);
return;
static void cmd_mynick(struct socket *sk, struct dcpeer *peer, char *cmd, char *args)
{
struct dcexppeer *expect;
+ struct dchub *hub;
if(peer->nativename != NULL)
free(peer->nativename);
{
peer->fn = NULL;
} else {
+ hub = expect->fn->data;
peer->fn = expect->fn;
getfnetnode(peer->fn);
+ peer->dcppemu = hub->dcppemu;
freeexppeer(expect);
}
}
endcompress(peer);
transfersetstate(transfer, TRNS_HS);
socksettos(peer->sk, confgetint("fnet", "fnptos"));
+ transfer->flags.b.minislot = 0;
peer->sk->writecb = NULL;
}
}
static struct dchub *newdchub(struct fnetnode *fn)
{
struct dchub *new;
+ wchar_t *emu;
new = smalloc(sizeof(*new));
memset(new, 0, sizeof(*new));
fn->data = new;
+ if(confgetint("dc", "dcppemu"))
+ new->dcppemu = 1;
+ if((emu = wpfind(fn->args, L"dcppemu")) != NULL)
+ {
+ if(*emu == L'y')
+ new->dcppemu = 1;
+ if(*emu == L'n')
+ new->dcppemu = 0;
+ }
if(hubsetnick(fn, fn->mynick))
fnetsetnick(fn, L"DoldaConnectUser-IN");
/* IN as in Invalid Nick */
new->transfer = NULL;
getsock(sk);
new->sk = sk;
+ if(confgetint("dc", "dcppemu"))
+ new->dcppemu = 1;
new->next = peers;
new->prev = NULL;
if(peers != NULL)
static void peerconnect(struct socket *sk, int err, struct fnetnode *fn)
{
struct dcpeer *peer;
+ struct dchub *hub;
if(err != 0)
{
putfnetnode(fn);
return;
}
+ hub = fn->data;
peer = newdcpeer(sk);
peer->fn = fn;
peer->accepted = 0;
+ peer->dcppemu = hub->dcppemu;
sk->readcb = (void (*)(struct socket *, void *))peerread;
sk->errcb = (void (*)(struct socket *, int, void *))peererror;
sk->data = peer;
for(i = 0; i < sizeof(cidbuf) - 1; i++)
cidbuf[i] = (rand() % ('Z' - 'A' + 1)) + 'A';
cidbuf[i] = 0;
- 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);
node = shareroot->child;
lev = 0;
}
}
-#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");
fclose(fs);
}
{CONF_VAR_STRING, "email", {.str = L"spam@spam.org"}},
{CONF_VAR_INT, "udpport", {.num = 0}},
{CONF_VAR_INT, "tcpport", {.num = 0}},
+ {CONF_VAR_BOOL, "dcppemu", {.num = 0}},
{CONF_VAR_END}
};