summaryrefslogtreecommitdiff
path: root/libmysql/manager.c
diff options
context:
space:
mode:
authorunknown <sasha@mysql.sashanet.com>2001-10-12 09:37:25 -0600
committerunknown <sasha@mysql.sashanet.com>2001-10-12 09:37:25 -0600
commita6c58676835f9424a5167a522497f1a20a5f03ee (patch)
treed203061bcdc7881db97565091caac83f2ac56fd4 /libmysql/manager.c
parentd34950e8d2db7a28c92c5129edc63a11bba0792d (diff)
downloadmariadb-git-a6c58676835f9424a5167a522497f1a20a5f03ee.tar.gz
changed manager to use my_net_*
fixed bug in master - unregister slaves when they disconnect client/mysqlmanagerc.c: changed default port include/mysql.h: use my_net_* libmysql/manager.c: use my_net_* mysql-test/mysql-test-run.sh: added support for client strace sql/sql_parse.cc: unregister slaves on disconnect sql/sql_repl.cc: unregister slaves on disconnect sql/sql_repl.h: unregister slaves on disconnect tools/mysqlmanager.c: changed to use my_net_*
Diffstat (limited to 'libmysql/manager.c')
-rw-r--r--libmysql/manager.c82
1 files changed, 28 insertions, 54 deletions
diff --git a/libmysql/manager.c b/libmysql/manager.c
index 2f34f49209c..f1fa73dbcd1 100644
--- a/libmysql/manager.c
+++ b/libmysql/manager.c
@@ -91,6 +91,7 @@ MYSQL_MANAGER* STDCALL mysql_manager_connect(MYSQL_MANAGER* con,
uint32 ip_addr;
char msg_buf[MAX_MYSQL_MANAGER_MSG];
int msg_len;
+ Vio* vio;
if (!host)
host="localhost";
@@ -105,13 +106,14 @@ MYSQL_MANAGER* STDCALL mysql_manager_connect(MYSQL_MANAGER* con,
strmov(con->last_error,"Cannot create socket");
goto err;
}
- if (!(con->vio=vio_new(sock,VIO_TYPE_TCPIP,FALSE)))
+ if (!(vio=vio_new(sock,VIO_TYPE_TCPIP,FALSE)))
{
con->last_errno=ENOMEM;
strmov(con->last_error,"Cannot create network I/O object");
goto err;
}
- vio_blocking(con->vio,TRUE);
+ vio_blocking(vio,TRUE);
+ my_net_init(&con->net,vio);
bzero((char*) &sock_addr,sizeof(sock_addr));
sock_addr.sin_family = AF_INET;
if ((int) (ip_addr = inet_addr(host)) != (int) INADDR_NONE)
@@ -155,7 +157,7 @@ MYSQL_MANAGER* STDCALL mysql_manager_connect(MYSQL_MANAGER* con,
goto err;
}
/* read the greating */
- if (vio_read(con->vio,msg_buf,MAX_MYSQL_MANAGER_MSG)<=0)
+ if (my_net_read(&con->net) == packet_error)
{
con->last_errno=errno;
strmov(con->last_error,"Read error on socket");
@@ -163,19 +165,19 @@ MYSQL_MANAGER* STDCALL mysql_manager_connect(MYSQL_MANAGER* con,
}
sprintf(msg_buf,"%-.16s %-.16s\n",user,passwd);
msg_len=strlen(msg_buf);
- if (vio_write(con->vio,msg_buf,msg_len)!=msg_len)
+ if (my_net_write(&con->net,msg_buf,msg_len) || net_flush(&con->net))
{
- con->last_errno=errno;
+ con->last_errno=con->net.last_errno;
strmov(con->last_error,"Write error on socket");
goto err;
}
- if (vio_read(con->vio,msg_buf,MAX_MYSQL_MANAGER_MSG)<=0)
+ if (my_net_read(&con->net) == packet_error)
{
con->last_errno=errno;
strmov(con->last_error,"Read error on socket");
goto err;
}
- if ((con->cmd_status=atoi(msg_buf)) != MANAGER_OK)
+ if ((con->cmd_status=atoi(con->net.read_pos)) != MANAGER_OK)
{
strmov(con->last_error,"Access denied");
goto err;
@@ -210,11 +212,7 @@ void STDCALL mysql_manager_close(MYSQL_MANAGER* con)
allocated in my_multimalloc() along with con->host, freeing
con->hosts frees the whole block
*/
- if (con->vio)
- {
- vio_delete(con->vio);
- con->vio=0;
- }
+ net_end(&con->net);
if (con->free_me)
my_free((gptr)con,MYF(0));
}
@@ -224,7 +222,7 @@ int STDCALL mysql_manager_command(MYSQL_MANAGER* con,const char* cmd,
{
if (!cmd_len)
cmd_len=strlen(cmd);
- if (vio_write(con->vio,(char*)cmd,cmd_len) != cmd_len)
+ if (my_net_write(&con->net,(char*)cmd,cmd_len) || net_flush(&con->net))
{
con->last_errno=errno;
strmov(con->last_error,"Write error on socket");
@@ -238,9 +236,9 @@ int STDCALL mysql_manager_fetch_line(MYSQL_MANAGER* con, char* res_buf,
int res_buf_size)
{
char* res_buf_end=res_buf+res_buf_size;
- char* net_buf_pos=con->net_buf_pos, *net_buf_end=con->net_data_end;
+ char* net_buf=con->net.read_pos, *net_buf_end;
int res_buf_shift=RES_BUF_SHIFT;
- int done=0;
+ uint num_bytes;
if (res_buf_size<RES_BUF_SHIFT)
{
@@ -249,50 +247,26 @@ int STDCALL mysql_manager_fetch_line(MYSQL_MANAGER* con, char* res_buf,
return 1;
}
- for (;;)
+ if ((num_bytes=my_net_read(&con->net)) == packet_error)
{
- for (;net_buf_pos<net_buf_end && res_buf<res_buf_end;
- net_buf_pos++,res_buf++)
- {
- char c=*net_buf_pos;
- if (c == '\r')
- c=*++net_buf_pos;
- if (c == '\n')
- {
- *res_buf=0;
- net_buf_pos++;
- done=1;
- break;
- }
- else
- *res_buf=*net_buf_pos;
- }
- if (done || res_buf==res_buf_end)
- break;
-
- if (net_buf_pos == net_buf_end && res_buf<res_buf_end)
- {
- int num_bytes;
- if ((num_bytes=vio_read(con->vio,con->net_buf,con->net_buf_size))<=0)
- {
- con->last_errno=errno;
- strmov(con->last_error,"socket read failed");
- return 1;
- }
- net_buf_pos=con->net_buf;
- net_buf_end=net_buf_pos+num_bytes;
- }
+ con->last_errno=errno;
+ strmov(con->last_error,"socket read failed");
+ return 1;
}
- con->net_buf_pos=net_buf_pos;
- con->net_data_end=net_buf_end;
- res_buf=res_buf_end-res_buf_size;
- if ((con->eof=(res_buf[3]==' ')))
+
+ net_buf_end=net_buf+num_bytes;
+
+ if ((con->eof=(net_buf[3]==' ')))
res_buf_shift--;
- res_buf_end-=res_buf_shift;
- for (;res_buf<res_buf_end;res_buf++)
+ net_buf+=res_buf_shift;
+ res_buf_end[-1]=0;
+ for (;net_buf<net_buf_end && res_buf < res_buf_end;res_buf++,net_buf++)
{
- if(!(*res_buf=res_buf[res_buf_shift]))
+ if((*res_buf=*net_buf) == '\r')
+ {
+ *res_buf=0;
break;
+ }
}
return 0;
}