Skip to content

Commit

Permalink
Add option ignore-version for bnchat and bnstat
Browse files Browse the repository at this point in the history
  • Loading branch information
HarpyWar committed Mar 25, 2014
1 parent c39f9f0 commit a1fb914
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 40 deletions.
12 changes: 10 additions & 2 deletions src/client/bnchat.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,7 @@ namespace
char curr_gamepass[MAX_GAMEPASS_LEN];
int count, clantag;
char const * inviter;
int ignoreversion;

} t_user_info;

Expand Down Expand Up @@ -368,6 +369,7 @@ namespace
" -o NAME, --owner=NAME report CD owner as NAME\n"
" -k KEY, --cdkey=KEY report CD key as KEY\n"
" -l LANG --lang=LANG report language as LANG (default \"enUS\")\n"
" -i, --ignore-version ignore version request (do not send game version, CD owner/key)\n"
" -h, --help, --usage show this information and exit\n"
" -v, --version print version number and exit\n");
std::exit(EXIT_FAILURE);
Expand All @@ -382,6 +384,7 @@ namespace
char const * * cdowner,
char const * * cdkey,
char const * * gamelang,
int * ignoreversion,
int * useansi)
{
int a;
Expand Down Expand Up @@ -636,6 +639,10 @@ namespace
std::fprintf(stderr, "%s: option \"%s\" requires an argument\n", argv[0], argv[a]);
usage(argv[0]);
}
else if (std::strcmp(argv[a], "-i") == 0 || std::strcmp(argv[a], "--ignore-version") == 0)
{
*ignoreversion = 1;
}
else
{
std::fprintf(stderr, "%s: unknown option \"%s\"\n", argv[0], argv[a]);
Expand Down Expand Up @@ -721,9 +728,10 @@ extern int main(int argc, char * argv[])
/* default values */
user.archtag = ARCHTAG_WINX86;
user.gamelang = CLIENT_COUNTRYINFO_109_GAMELANG;
user.ignoreversion = 0;

read_commandline(argc, argv, &servname, &servport, &user.clienttag, &user.archtag, &changepass,
&newacct, &user.channel, &user.cdowner, &user.cdkey, &user.gamelang, &client.useansi);
&newacct, &user.channel, &user.cdowner, &user.cdkey, &user.gamelang, &user.ignoreversion, &client.useansi);

client.fd_stdin = fileno(stdin);
if (tcgetattr(client.fd_stdin, &client.in_attr_old) >= 0)
Expand Down Expand Up @@ -771,7 +779,7 @@ extern int main(int argc, char * argv[])
}

if ((client.sd = client_connect(argv[0],
servname, servport, user.cdowner, user.cdkey, user.clienttag,
servname, servport, user.cdowner, user.cdkey, user.clienttag, user.ignoreversion,
&client.saddr, &client.sessionkey, &client.sessionnum, user.archtag, user.gamelang)) < 0)
{
std::fprintf(stderr, "%s: fatal error during handshake\n", argv[0]);
Expand Down
6 changes: 5 additions & 1 deletion src/client/bnstat.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ namespace
std::fprintf(stderr,
" -o NAME, --owner=NAME report CD owner as NAME\n"
" -k KEY, --cdkey=KEY report CD key as KEY\n"
" -i, --ignore-version ignore version request (do not send game version, CD owner/key)\n"
" -p PLR, --player=PLR print stats for player PLR\n"
" --bnetd also print BNETD-specific stats\n"
" --fsgs also print FSGS-specific stats\n"
Expand Down Expand Up @@ -134,6 +135,7 @@ extern int main(int argc, char * argv[])
int use_fsgs = 0;
unsigned int screen_width, screen_height;
int munged = 0;
int ignoreversion = 0;

if (argc < 1 || !argv || !argv[0])
{
Expand Down Expand Up @@ -332,6 +334,8 @@ extern int main(int argc, char * argv[])
else if (std::strcmp(argv[a], "-h") == 0 || std::strcmp(argv[a], "--help") == 0 || std::strcmp(argv[a], "--usage")
== 0)
usage(argv[0]);
else if (std::strcmp(argv[a], "-i") == 0 || std::strcmp(argv[a], "--ignore-version") == 0)
ignoreversion = 1;
else if (std::strcmp(argv[a], "-v") == 0 || std::strcmp(argv[a], "--version") == 0)
{
std::printf("version "PVPGN_VERSION"\n");
Expand Down Expand Up @@ -388,7 +392,7 @@ extern int main(int argc, char * argv[])
}
}

if ((sd = client_connect(argv[0], servname, servport, cdowner, cdkey, clienttag, &saddr, &sessionkey, &sessionnum, ARCHTAG_WINX86, CLIENT_COUNTRYINFO_109_GAMELANG)) < 0)
if ((sd = client_connect(argv[0], servname, servport, cdowner, cdkey, clienttag, ignoreversion, &saddr, &sessionkey, &sessionnum, ARCHTAG_WINX86, CLIENT_COUNTRYINFO_109_GAMELANG)) < 0)
{
std::fprintf(stderr, "%s: fatal error during handshake\n", argv[0]);
if (changed_in)
Expand Down
77 changes: 42 additions & 35 deletions src/client/client_connect.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,9 @@ namespace {
*exeinfo = "";
*checksum = 0;

if (std::strcmp(clienttag, CLIENTTAG_BNCHATBOT) == 0)
return 0;

std::fprintf(stderr, "%s: unsupported clienttag \"%s\"\n", progname, clienttag);
// aaron: dunno what we should return in case of this.. but returning nothing was definetly wrong
return -1;
Expand All @@ -155,7 +158,7 @@ namespace pvpgn
namespace client
{

extern int client_connect(char const * progname, char const * servname, unsigned short servport, char const * cdowner, char const * cdkey, char const * clienttag, struct sockaddr_in * saddr, unsigned int * sessionkey, unsigned int * sessionnum, char const * archtag, char const * gamelang)
extern int client_connect(char const * progname, char const * servname, unsigned short servport, char const * cdowner, char const * cdkey, char const * clienttag, int ignoreversion, struct sockaddr_in * saddr, unsigned int * sessionkey, unsigned int * sessionnum, char const * archtag, char const * gamelang)
{
struct hostent * host;
char const * username;
Expand Down Expand Up @@ -329,45 +332,49 @@ namespace pvpgn
*sessionnum = bn_int_get(rpacket->u.server_authreq_109.sessionnum);
/* FIXME: also get filename and equation */

if (!(packet = packet_create(packet_class_bnet)))
if (!ignoreversion)
{
std::fprintf(stderr, "%s: could not create packet\n", progname);
goto error_rpacket;
}
packet_set_size(packet, sizeof(t_client_authreq_109));
packet_set_type(packet, CLIENT_AUTHREQ_109);
bn_int_set(&packet->u.client_authreq_109.ticks, std::time(NULL));

{
t_cdkey_info cdkey_info;
if (!(packet = packet_create(packet_class_bnet)))
{
std::fprintf(stderr, "%s: could not create packet\n", progname);
goto error_rpacket;
}
packet_set_size(packet, sizeof(t_client_authreq_109));
packet_set_type(packet, CLIENT_AUTHREQ_109);
bn_int_set(&packet->u.client_authreq_109.ticks, std::time(NULL));

bn_int_set(&packet->u.client_authreq_109.gameversion, gameversion);
{
t_cdkey_info cdkey_info;

bn_int_set(&packet->u.client_authreq_109.cdkey_number, 1); /* only one */
std::memset(&cdkey_info, '0', sizeof(cdkey_info));
/* FIXME: put the input cdkey here */
packet_append_data(packet, &cdkey_info, sizeof(cdkey_info));
packet_append_string(packet, exeinfo);
packet_append_string(packet, cdowner);
}
bn_int_set(&packet->u.client_authreq_109.spawn, 0x0000);
bn_int_set(&packet->u.client_authreq_109.checksum, checksum);
client_blocksend_packet(sd, packet);
packet_del_ref(packet);
bn_int_set(&packet->u.client_authreq_109.gameversion, gameversion);

/* now wait for reply */
do
if (client_blockrecv_packet(sd, rpacket) < 0)
{
std::fprintf(stderr, "%s: server closed connection\n", progname);
goto error_rpacket;
}
while (packet_get_type(rpacket) != SERVER_AUTHREPLY_109);
//FIXME: check if AUTHREPLY_109 is success or fail
if (bn_int_get(rpacket->u.server_authreply_109.message) != SERVER_AUTHREPLY_109_MESSAGE_OK)
{
std::fprintf(stderr, "AUTHREPLY_109 failed - closing connection\n");
goto error_rpacket;
bn_int_set(&packet->u.client_authreq_109.cdkey_number, 1); /* only one */
std::memset(&cdkey_info, '0', sizeof(cdkey_info));
/* FIXME: put the input cdkey here */
packet_append_data(packet, &cdkey_info, sizeof(cdkey_info));
packet_append_string(packet, exeinfo);
packet_append_string(packet, cdowner);
}
bn_int_set(&packet->u.client_authreq_109.spawn, 0x0000);
bn_int_set(&packet->u.client_authreq_109.checksum, checksum);
client_blocksend_packet(sd, packet);
packet_del_ref(packet);

/* now wait for reply */
do
if (client_blockrecv_packet(sd, rpacket) < 0)
{
std::fprintf(stderr, "%s: server closed connection\n", progname);
goto error_rpacket;
}
while (packet_get_type(rpacket) != SERVER_AUTHREPLY_109);
//FIXME: check if AUTHREPLY_109 is success or fail
if (bn_int_get(rpacket->u.server_authreply_109.message) != SERVER_AUTHREPLY_109_MESSAGE_OK)
{
std::fprintf(stderr, "AUTHREPLY_109 failed - closing connection\n");
goto error_rpacket;
}
}
}
else
Expand Down
3 changes: 1 addition & 2 deletions src/client/client_connect.h
Original file line number Diff line number Diff line change
Expand Up @@ -83,10 +83,9 @@ namespace pvpgn
namespace client
{

extern int client_connect(char const * progname, char const * servname, unsigned short servport, char const * cdowner, char const * cdkey, char const * clienttag, struct sockaddr_in * saddr, unsigned int * sessionkey, unsigned int * sessionnum, char const * archtag, char const * gamelang);
extern int client_connect(char const * progname, char const * servname, unsigned short servport, char const * cdowner, char const * cdkey, char const * clienttag, int ignoreversion, struct sockaddr_in * saddr, unsigned int * sessionkey, unsigned int * sessionnum, char const * archtag, char const * gamelang);

}

}
#endif
#endif

0 comments on commit a1fb914

Please sign in to comment.