#include <socket.h>
#include <socket_errors.h>
string *received, *to_send;
int cs, rs, reset, local_port, remote_port;
void do_cre_socket();
void do_remote_socket();
string *query_to_send() { return to_send; }
string *query_received() { return received; }
void do_sockets() {
received = ({ });
to_send = ({ });
if (mud_name() == "FR") {
local_port = 3010;
remote_port = 4010;
} else {
local_port = 4010;
remote_port = 3010;
}
log_file("CONNECT","--- "+ctime(time())+" ---\n");
do_cre_socket();
do_remote_socket();
} /* do_sockets() */
void do_cre_socket() {
int error;
cs = socket_create(DATAGRAM, "read_callback");
if (cs < 0) {
log_file("CONNECT","**socket_create: " + socket_error(cs) + "\n");
return;
}
log_file("CONNECT","Created Socket " + cs + "\n");
error = socket_bind(cs, local_port);
if (error != EESUCCESS) {
log_file("CONNECT","**socket_bind: " + socket_error(error) + "\n");
socket_close(cs);
return;
}
} /* do_cre_socket() */
void do_remote_socket() {
int error;
rs = socket_create(DATAGRAM, "read_callback");
if (rs < 0) {
log_file("CONNECT","**socket_create: " + socket_error(rs) + "\n");
return;
}
log_file("CONNECT","Created Socket " + rs + "\n");
error = socket_bind(rs, 0);
if (error != EESUCCESS) {
log_file("CONNECT","**socket_bind: " + socket_error(error) + "\n");
socket_close(rs);
return;
}
} /* do_remote_socket() */
void read_callback(int fd, string data) {
received += ({ data });
this_object()->received_cre();
} /* read_callback() */
void transmit() {
int error, i;
if (sizeof(to_send))
while (sizeof(to_send)) {
error = socket_write(rs, to_send[i], "127.0.0.1 "+remote_port);
to_send = delete(to_send,0,1);
if (error == EEBADF) { /* its disappeared! lets get it back.. */
socket_close(rs);
do_remote_socket();
}
if (error < 0) {
log_file("CONNECT","**socket_write: " + socket_error(error) + "\n");
return;
}
}
} /* transmit() */
void add_send_mess(string mess) {
if(!to_send) to_send = ({ });
to_send += ({ mess });
} /* add_send_mess() */
void received_cre() { }