#include <my_global.h>#include "mysql.h"#include "mysql_version.h"#include "mysqld_error.h"#include <my_sys.h>#include <mysys_err.h>#include <m_string.h>#include <m_ctype.h>#include <my_net.h>#include <errmsg.h>#include <violite.h>#include <sys/stat.h>#include <signal.h>#include <errno.h>#include <sys/resource.h>#include <netdb.h>#include <sys/utsname.h>Include dependency graph for manager.c:

Go to the source code of this file.
Defines | |
| #define | INADDR_NONE -1 |
| #define | RES_BUF_SHIFT 5 |
| #define | NET_BUF_SIZE 2048 |
Functions | |
| MYSQL_MANAGER *STDCALL | mysql_manager_init (MYSQL_MANAGER *con) |
| MYSQL_MANAGER *STDCALL | mysql_manager_connect (MYSQL_MANAGER *con, const char *host, const char *user, const char *passwd, unsigned int port) |
| void STDCALL | mysql_manager_close (MYSQL_MANAGER *con) |
| int STDCALL | mysql_manager_command (MYSQL_MANAGER *con, const char *cmd, int cmd_len) |
| int STDCALL | mysql_manager_fetch_line (MYSQL_MANAGER *con, char *res_buf, int res_buf_size) |
| void STDCALL mysql_manager_close | ( | MYSQL_MANAGER * | con | ) |
Definition at line 202 of file manager.c.
References st_mysql_manager::free_me, st_mysql_manager::host, MY_ALLOW_ZERO_PTR, my_free, MYF, st_mysql_manager::net, and net_end().
Referenced by mysql_manager_connect().
00203 { 00204 /* 00205 No need to free con->user and con->passwd, because they were 00206 allocated in my_multimalloc() along with con->host, freeing 00207 con->hosts frees the whole block 00208 */ 00209 my_free((gptr)con->host,MYF(MY_ALLOW_ZERO_PTR)); 00210 net_end(&con->net); 00211 if (con->free_me) 00212 my_free((gptr)con,MYF(0)); 00213 }
Here is the call graph for this function:

Here is the caller graph for this function:

| int STDCALL mysql_manager_command | ( | MYSQL_MANAGER * | con, | |
| const char * | cmd, | |||
| int | cmd_len | |||
| ) |
Definition at line 216 of file manager.c.
References st_mysql_manager::eof, errno, st_mysql_manager::last_errno, st_mysql_manager::last_error, my_net_write(), st_mysql_manager::net, net_flush(), strlen(), and strmov().
00218 { 00219 if (!cmd_len) 00220 cmd_len=strlen(cmd); 00221 if (my_net_write(&con->net,(char*)cmd,cmd_len) || net_flush(&con->net)) 00222 { 00223 con->last_errno=errno; 00224 strmov(con->last_error,"Write error on socket"); 00225 return 1; 00226 } 00227 con->eof=0; 00228 return 0; 00229 }
Here is the call graph for this function:

| MYSQL_MANAGER* STDCALL mysql_manager_connect | ( | MYSQL_MANAGER * | con, | |
| const char * | host, | |||
| const char * | user, | |||
| const char * | passwd, | |||
| unsigned int | port | |||
| ) |
Definition at line 86 of file manager.c.
References atoi(), bzero, st_mysql_manager::cmd_status, err, errno, FALSE, st_mysql_manager::free_me, GETHOSTBYNAME_BUFF_SIZE, st_mysql_manager::host, in_addr_t, INADDR_NONE, INVALID_SOCKET, st_net::last_errno, st_mysql_manager::last_errno, st_mysql_manager::last_error, MANAGER_OK, MAX_MYSQL_MANAGER_MSG, memcpy, memcpy_fixed, msg_buf, my_connect(), my_gethostbyname_r(), my_gethostbyname_r_free(), my_multi_malloc(), my_net_init(), my_net_read(), my_net_write(), my_socket, MYF, mysql_manager_close(), st_mysql_manager::net, net_flush(), NullS, packet_error, st_mysql_manager::passwd, st_net::read_pos, sock, strlen(), strmov(), TRUE, st_mysql_manager::user, vio_blocking, vio_new(), and VIO_TYPE_TCPIP.
00091 { 00092 my_socket sock; 00093 struct sockaddr_in sock_addr; 00094 in_addr_t ip_addr; 00095 char msg_buf[MAX_MYSQL_MANAGER_MSG]; 00096 int msg_len; 00097 Vio* vio; 00098 my_bool not_used; 00099 00100 if (!host) 00101 host="localhost"; 00102 if (!user) 00103 user="root"; 00104 if (!passwd) 00105 passwd=""; 00106 00107 if ((sock=(my_socket)socket(AF_INET,SOCK_STREAM,0)) == INVALID_SOCKET) 00108 { 00109 con->last_errno=errno; 00110 strmov(con->last_error,"Cannot create socket"); 00111 goto err; 00112 } 00113 if (!(vio=vio_new(sock,VIO_TYPE_TCPIP,FALSE))) 00114 { 00115 con->last_errno=ENOMEM; 00116 strmov(con->last_error,"Cannot create network I/O object"); 00117 goto err; 00118 } 00119 vio_blocking(vio, TRUE, ¬_used); 00120 my_net_init(&con->net,vio); 00121 bzero((char*) &sock_addr,sizeof(sock_addr)); 00122 sock_addr.sin_family = AF_INET; 00123 if ((int) (ip_addr = inet_addr(host)) != (int) INADDR_NONE) 00124 { 00125 memcpy_fixed(&sock_addr.sin_addr,&ip_addr,sizeof(ip_addr)); 00126 } 00127 else 00128 { 00129 int tmp_errno; 00130 struct hostent tmp_hostent,*hp; 00131 char buff2[GETHOSTBYNAME_BUFF_SIZE]; 00132 hp = my_gethostbyname_r(host,&tmp_hostent,buff2,sizeof(buff2), 00133 &tmp_errno); 00134 if (!hp) 00135 { 00136 con->last_errno=tmp_errno; 00137 sprintf(con->last_error,"Could not resolve host '%-.64s'",host); 00138 my_gethostbyname_r_free(); 00139 goto err; 00140 } 00141 memcpy(&sock_addr.sin_addr,hp->h_addr, (size_t) hp->h_length); 00142 my_gethostbyname_r_free(); 00143 } 00144 sock_addr.sin_port = (ushort) htons((ushort) port); 00145 if (my_connect(sock,(struct sockaddr *) &sock_addr, sizeof(sock_addr), 00146 0)) 00147 { 00148 con->last_errno=errno; 00149 sprintf(con->last_error ,"Could not connect to %-.64s", host); 00150 goto err; 00151 } 00152 /* read the greating */ 00153 if (my_net_read(&con->net) == packet_error) 00154 { 00155 con->last_errno=errno; 00156 strmov(con->last_error,"Read error on socket"); 00157 goto err; 00158 } 00159 sprintf(msg_buf,"%-.16s %-.16s\n",user,passwd); 00160 msg_len=strlen(msg_buf); 00161 if (my_net_write(&con->net,msg_buf,msg_len) || net_flush(&con->net)) 00162 { 00163 con->last_errno=con->net.last_errno; 00164 strmov(con->last_error,"Write error on socket"); 00165 goto err; 00166 } 00167 if (my_net_read(&con->net) == packet_error) 00168 { 00169 con->last_errno=errno; 00170 strmov(con->last_error,"Read error on socket"); 00171 goto err; 00172 } 00173 if ((con->cmd_status=atoi((char*) con->net.read_pos)) != MANAGER_OK) 00174 { 00175 strmov(con->last_error,"Access denied"); 00176 goto err; 00177 } 00178 if (!my_multi_malloc(MYF(0), &con->host, (uint)strlen(host)+1, 00179 &con->user, (uint)strlen(user)+1, 00180 &con->passwd, (uint)strlen(passwd)+1, 00181 NullS)) 00182 { 00183 con->last_errno=ENOMEM; 00184 strmov(con->last_error,"Out of memory"); 00185 goto err; 00186 } 00187 strmov(con->host,host); 00188 strmov(con->user,user); 00189 strmov(con->passwd,passwd); 00190 return con; 00191 00192 err: 00193 { 00194 my_bool free_me=con->free_me; 00195 con->free_me=0; 00196 mysql_manager_close(con); 00197 con->free_me=free_me; 00198 } 00199 return 0; 00200 }
Here is the call graph for this function:

| int STDCALL mysql_manager_fetch_line | ( | MYSQL_MANAGER * | con, | |
| char * | res_buf, | |||
| int | res_buf_size | |||
| ) |
Definition at line 232 of file manager.c.
References st_mysql_manager::eof, errno, st_mysql_manager::last_errno, st_mysql_manager::last_error, my_net_read(), st_mysql_manager::net, packet_error, st_net::read_pos, RES_BUF_SHIFT, and strmov().
00234 { 00235 char* res_buf_end=res_buf+res_buf_size; 00236 char* net_buf=(char*) con->net.read_pos, *net_buf_end; 00237 int res_buf_shift=RES_BUF_SHIFT; 00238 ulong num_bytes; 00239 00240 if (res_buf_size<RES_BUF_SHIFT) 00241 { 00242 con->last_errno=ENOMEM; 00243 strmov(con->last_error,"Result buffer too small"); 00244 return 1; 00245 } 00246 00247 if ((num_bytes=my_net_read(&con->net)) == packet_error) 00248 { 00249 con->last_errno=errno; 00250 strmov(con->last_error,"socket read failed"); 00251 return 1; 00252 } 00253 00254 net_buf_end=net_buf+num_bytes; 00255 00256 if ((con->eof=(net_buf[3]==' '))) 00257 res_buf_shift--; 00258 net_buf+=res_buf_shift; 00259 res_buf_end[-1]=0; 00260 for (;net_buf<net_buf_end && res_buf < res_buf_end;res_buf++,net_buf++) 00261 { 00262 if ((*res_buf=*net_buf) == '\r') 00263 { 00264 *res_buf=0; 00265 break; 00266 } 00267 } 00268 return 0; 00269 }
Here is the call graph for this function:

| MYSQL_MANAGER* STDCALL mysql_manager_init | ( | MYSQL_MANAGER * | con | ) |
Definition at line 64 of file manager.c.
References bzero, my_malloc(), MY_WME, MY_ZEROFILL, MYF, st_mysql_manager::net_buf, st_mysql_manager::net_buf_pos, st_mysql_manager::net_buf_size, NET_BUF_SIZE, and st_mysql_manager::net_data_end.
00065 { 00066 int net_buf_size=NET_BUF_SIZE; 00067 if (!con) 00068 { 00069 if (!(con=(MYSQL_MANAGER*)my_malloc(sizeof(*con)+net_buf_size, 00070 MYF(MY_WME|MY_ZEROFILL)))) 00071 return 0; 00072 con->free_me=1; 00073 con->net_buf=(char*)con+sizeof(*con); 00074 } 00075 else 00076 { 00077 bzero((char*)con,sizeof(*con)); 00078 if (!(con->net_buf=my_malloc(net_buf_size,MYF(0)))) 00079 return 0; 00080 } 00081 con->net_buf_pos=con->net_data_end=con->net_buf; 00082 con->net_buf_size=net_buf_size; 00083 return con; 00084 }
Here is the call graph for this function:

1.4.7

