annotate src/mysql/ngx_mysql.c @ 1574:6a60502db714

use ngx_sha1.h
author Igor Sysoev <igor@sysoev.ru>
date Tue, 16 Oct 2007 12:17:11 +0000
parents 4d68c486fcb0
children 2a92804f4109
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
645
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2 /*
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3 * Copyright (C) Igor Sysoev
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4 */
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
5
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
6
653
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
7 /* the library supports the subset of the MySQL 4.1+ protocol (version 10) */
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
8
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
9
645
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10 #include <ngx_config.h>
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11 #include <ngx_core.h>
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
12 #include <ngx_event.h>
653
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
13 #include <ngx_event_connect.h>
645
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
14 #include <ngx_mysql.h>
1574
6a60502db714 use ngx_sha1.h
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
15 #include <ngx_sha1.h>
645
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
16
653
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
17
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
18 #define NGX_MYSQL_LONG_PASSWORD 0x0001
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
19 #define NGX_MYSQL_CONNECT_WITH_DB 0x0008
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
20 #define NGX_MYSQL_PROTOCOL_41 0x0200
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
21 #define NGX_MYSQL_SECURE_CONNECTION 0x8000
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
22
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
23
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
24 #define NGX_MYSQL_CMD_QUERY 3
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
25
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
26
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
27 typedef struct {
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
28 u_char pktlen[3];
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
29 u_char pktn;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
30
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
31 u_char protocol;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
32 u_char version[1]; /* NULL-terminated string */
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
33 } ngx_mysql_greeting1_pkt_t;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
34
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
35
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
36 typedef struct {
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
37 u_char thread[4];
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
38 u_char salt1[9];
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
39 u_char capacity[2];
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
40 u_char charset;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
41 u_char status[2];
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
42 u_char zero[13];
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
43 u_char salt2[13];
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
44 } ngx_mysql_greeting2_pkt_t;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
45
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
46
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
47 typedef struct {
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
48 u_char pktlen[3];
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
49 u_char pktn;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
50
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
51 u_char capacity[4];
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
52 u_char max_packet[4];
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
53 u_char charset;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
54 u_char zero[23];
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
55 u_char login[1]; /* NULL-terminated string */
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
56
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
57 /*
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
58 * u_char passwd_len; 0 if no password
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
59 * u_char passwd[20];
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
60 *
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
61 * u_char database[1]; NULL-terminated string
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
62 */
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
63
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
64 } ngx_mysql_auth_pkt_t;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
65
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
66
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
67 typedef struct {
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
68 u_char pktlen[3];
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
69 u_char pktn;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
70 u_char fields;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
71 } ngx_mysql_response_pkt_t;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
72
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
73
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
74 typedef struct {
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
75 u_char pktlen[3];
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
76 u_char pktn;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
77 u_char err;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
78 u_char code[2];
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
79 u_char message[1]; /* string */
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
80 } ngx_mysql_error_pkt_t;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
81
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
82
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
83 typedef struct {
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
84 u_char pktlen[3];
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
85 u_char pktn;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
86 u_char command;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
87 u_char arg[1]; /* string */
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
88 } ngx_mysql_command_pkt_t;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
89
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
90
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
91 static void ngx_mysql_read_server_greeting(ngx_event_t *rev);
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
92 static void ngx_mysql_empty_handler(ngx_event_t *wev);
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
93 static void ngx_mysql_read_auth_result(ngx_event_t *rev);
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
94 static void ngx_mysql_read_query_result(ngx_event_t *rev);
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
95 static void ngx_mysql_close(ngx_mysql_t *m, ngx_int_t rc);
645
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
96
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
97
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
98 ngx_int_t
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
99 ngx_mysql_connect(ngx_mysql_t *m)
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
100 {
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
101 ngx_int_t rc;
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
102
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
103 #if 0
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
104 if (cached) {
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
105 return NGX_OK;
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
106 }
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
107 #endif
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
108
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
109 m->peer.log->action = "connecting to mysql server";
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
110
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
111 rc = ngx_event_connect_peer(&m->peer);
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
112
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
113 if (rc == NGX_ERROR || rc == NGX_BUSY || rc == NGX_DECLINED) {
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
114 return rc;
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
115 }
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
116
653
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
117 m->peer.connection->data = m;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
118
645
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
119 m->peer.connection->read->handler = ngx_mysql_read_server_greeting;
653
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
120 m->peer.connection->write->handler = ngx_mysql_empty_handler;
645
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
121
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
122 ngx_add_timer(m->peer.connection->read, /* STUB */ 5000);
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
123
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
124 return NGX_OK;
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
125 }
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
126
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
127
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
128 static void
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
129 ngx_mysql_read_server_greeting(ngx_event_t *rev)
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
130 {
653
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
131 size_t len;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
132 u_char *p;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
133 ssize_t n;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
134 ngx_uint_t i, capacity;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
135 ngx_mysql_t *m;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
136 ngx_connection_t *c;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
137 ngx_mysql_greeting1_pkt_t *gr1;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
138 ngx_mysql_greeting2_pkt_t *gr2;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
139 ngx_mysql_auth_pkt_t *auth;
1574
6a60502db714 use ngx_sha1.h
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
140 ngx_sha1_t sha;
653
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
141 u_char hash1[20], hash2[20];
645
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
142
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
143 c = rev->data;
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
144 m = c->data;
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
145
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
146 if (rev->timedout) {
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
147 ngx_log_error(NGX_LOG_ERR, rev->log, NGX_ETIMEDOUT,
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
148 "mysql server %V timed out", m->peer.name);
645
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
149
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
150 ngx_mysql_close(m, NGX_ERROR);
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
151 return;
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
152 }
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
153
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
154 if (m->buf == NULL) {
653
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
155 m->peer.log->action = "reading mysql server greeting";
645
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
156
653
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
157 m->buf = ngx_create_temp_buf(m->pool, /* STUB */ 1024);
645
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
158 if (m->buf == NULL) {
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
159 ngx_mysql_close(m, NGX_ERROR);
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
160 return;
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
161 }
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
162 }
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
163
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
164 n = ngx_recv(m->peer.connection, m->buf->pos, /* STUB */ 1024);
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
165
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
166 if (n == NGX_AGAIN) {
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
167 return;
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
168 }
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
169
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
170 if (n < 5) {
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
171 ngx_mysql_close(m, NGX_ERROR);
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
172 return;
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
173 }
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
174
653
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
175 gr1 = (ngx_mysql_greeting1_pkt_t *) m->buf->pos;
645
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
176
653
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
177 if (ngx_m24toh(gr1->pktlen) > n - 4) {
645
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
178 ngx_log_error(NGX_LOG_ERR, rev->log, 0,
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
179 "mysql server %V sent incomplete greeting packet",
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
180 m->peer.name);
653
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
181
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
182 ngx_mysql_close(m, NGX_ERROR);
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
183 return;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
184 }
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
185
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
186 if (gr1->protocol < 10) {
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
187 ngx_log_error(NGX_LOG_ERR, rev->log, 0,
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
188 "mysql server %V sent unsupported protocol version %ud",
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
189 m->peer.name, gr1->protocol);
653
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
190
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
191 ngx_mysql_close(m, NGX_ERROR);
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
192 return;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
193 }
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
194
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
195 gr2 = (ngx_mysql_greeting2_pkt_t *)
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
196 (gr1->version + ngx_strlen(gr1->version) + 1);
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
197
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
198 capacity = ngx_m16toh(gr2->capacity);
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
199
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
200 ngx_log_debug8(NGX_LOG_DEBUG_MYSQL, rev->log, 0,
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
201 "mysql version: %ud, \"%s\", thread: %ud, salt: \"%s\", "
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
202 "capacity: %Xd, charset: %ud, status: %ud, salt rest \"%s\"",
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
203 gr1->protocol, gr1->version, ngx_m32toh(gr2->thread),
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
204 gr2->salt1, capacity, gr2->charset,
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
205 ngx_m16toh(gr2->status), &gr2->salt2);
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
206
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
207 capacity = NGX_MYSQL_LONG_PASSWORD
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
208 | NGX_MYSQL_CONNECT_WITH_DB
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
209 | NGX_MYSQL_PROTOCOL_41
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
210 | NGX_MYSQL_SECURE_CONNECTION;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
211
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
212 len = 4 + 4 + 4 + 1 + 23 + m->login->len + 1 + 1 + m->database->len + 1;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
213
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
214 if (m->passwd->len) {
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
215 len += 20;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
216 }
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
217
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
218 auth = ngx_palloc(m->pool, len);
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
219 if (auth == NULL) {
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
220 ngx_mysql_close(m, NGX_ERROR);
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
221 return;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
222 }
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
223
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
224 ngx_htom24(auth->pktlen, len - 4);
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
225 auth->pktn = (u_char) (gr1->pktn + 1);
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
226
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
227 ngx_htom32(auth->capacity, capacity);
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
228 ngx_htom32(auth->max_packet, 0x01000000); /* max packet size 2^24 */
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
229 ngx_memzero(auth->zero, 24);
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
230 auth->charset = gr2->charset;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
231
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
232 p = ngx_copy(auth->login, m->login->data, m->login->len);
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
233 *p++ = '\0';
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
234
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
235 if (m->passwd->len) {
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
236
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
237 *p++ = (u_char) 20;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
238
1574
6a60502db714 use ngx_sha1.h
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
239 ngx_sha1_init(&sha);
6a60502db714 use ngx_sha1.h
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
240 ngx_sha1_update(&sha, m->passwd->data, m->passwd->len);
6a60502db714 use ngx_sha1.h
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
241 ngx_sha1_final(hash1, &sha);
653
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
242
1574
6a60502db714 use ngx_sha1.h
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
243 ngx_sha1_init(&sha);
6a60502db714 use ngx_sha1.h
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
244 ngx_sha1_update(&sha, hash1, 20);
6a60502db714 use ngx_sha1.h
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
245 ngx_sha1_final(hash2, &sha);
653
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
246
1574
6a60502db714 use ngx_sha1.h
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
247 ngx_sha1_init(&sha);
6a60502db714 use ngx_sha1.h
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
248 ngx_sha1_update(&sha, gr2->salt1, 8);
6a60502db714 use ngx_sha1.h
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
249 ngx_sha1_update(&sha, gr2->salt2, 12);
6a60502db714 use ngx_sha1.h
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
250 ngx_sha1_update(&sha, hash2, 20);
6a60502db714 use ngx_sha1.h
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
251 ngx_sha1_final(hash2, &sha);
653
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
252
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
253 for (i = 0; i < 20; i++) {
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
254 *p++ = (u_char) (hash1[i] ^ hash2[i]);
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
255 }
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
256
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
257 } else {
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
258 *p++ = '\0';
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
259 }
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
260
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
261 p = ngx_copy(p, m->database->data, m->database->len);
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
262 *p = '\0';
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
263
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
264
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
265 n = ngx_send(m->peer.connection, (void *) auth, len);
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
266
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
267 if (n < (ssize_t) len) {
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
268 ngx_log_error(NGX_LOG_ERR, rev->log, 0,
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
269 "the incomplete packet was sent to mysql server %V",
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
270 m->peer.name);
645
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
271
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
272 ngx_mysql_close(m, NGX_ERROR);
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
273 return;
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
274 }
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
275
653
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
276 m->peer.connection->read->handler = ngx_mysql_read_auth_result;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
277
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
278 ngx_add_timer(m->peer.connection->read, /* STUB */ 5000);
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
279 }
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
280
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
281
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
282 static void
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
283 ngx_mysql_empty_handler(ngx_event_t *wev)
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
284 {
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
285 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, wev->log, 0, "mysql empty handler");
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
286
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
287 return;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
288 }
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
289
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
290
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
291 static void
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
292 ngx_mysql_read_auth_result(ngx_event_t *rev)
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
293 {
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
294 ssize_t n, len;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
295 ngx_str_t msg;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
296 ngx_mysql_t *m;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
297 ngx_connection_t *c;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
298 ngx_mysql_error_pkt_t *epkt;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
299 ngx_mysql_response_pkt_t *pkt;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
300
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
301 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, rev->log, 0, "mysql read auth");
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
302
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
303 c = rev->data;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
304 m = c->data;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
305
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
306 m->peer.log->action = "reading mysql auth result";
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
307
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
308 n = ngx_recv(m->peer.connection, m->buf->pos, /* STUB */ 1024);
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
309
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
310 if (n == NGX_AGAIN) {
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
311 return;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
312 }
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
313
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
314 if (n < 5) {
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
315 ngx_mysql_close(m, NGX_ERROR);
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
316 return;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
317 }
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
318
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
319 pkt = (ngx_mysql_response_pkt_t *) m->buf->pos;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
320
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
321 len = ngx_m24toh(pkt->pktlen);
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
322
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
323 if (len > n - 4) {
645
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
324 ngx_log_error(NGX_LOG_ERR, rev->log, 0,
653
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
325 "mysql server %V sent incomplete response packet",
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
326 m->peer.name);
645
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
327
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
328 ngx_mysql_close(m, NGX_ERROR);
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
329 return;
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
330 }
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
331
653
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
332 if (pkt->fields == 0) {
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
333 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, rev->log, 0, "mysql auth OK");
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
334
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
335 m->state = NGX_OK;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
336 m->pktn = 0;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
337
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
338 m->handler(m);
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
339
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
340 return;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
341 }
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
342
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
343 epkt = (ngx_mysql_error_pkt_t *) pkt;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
344
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
345 msg.len = (u_char *) epkt + 4 + len - epkt->message;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
346 msg.data = epkt->message;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
347
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
348 ngx_log_error(NGX_LOG_ERR, rev->log, 0,
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
349 "mysql server %V sent error (%ud): \"%V\"",
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
350 m->peer.name, ngx_m16toh(epkt->code), &msg);
653
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
351
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
352 ngx_mysql_close(m, NGX_ERROR);
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
353 }
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
354
645
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
355
653
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
356 ngx_int_t
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
357 ngx_mysql_query(ngx_mysql_t *m)
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
358 {
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
359 ssize_t n;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
360 ngx_mysql_command_pkt_t *pkt;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
361
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
362 pkt = (ngx_mysql_command_pkt_t *) m->query.data;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
363
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
364 ngx_htom24(pkt->pktlen, m->query.len - 4);
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
365 pkt->pktn = (u_char) m->pktn++;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
366 pkt->command = NGX_MYSQL_CMD_QUERY;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
367
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
368 n = ngx_send(m->peer.connection, m->query.data, m->query.len);
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
369
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
370 if (n < (ssize_t) m->query.len) {
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
371 ngx_log_error(NGX_LOG_ERR, m->peer.log, 0,
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
372 "the incomplete packet was sent to mysql server %V",
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
373 m->peer.name);
653
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
374
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
375 ngx_mysql_close(m, NGX_ERROR);
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
376 return NGX_OK;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
377 }
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
378
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
379 m->peer.connection->read->handler = ngx_mysql_read_query_result;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
380
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
381 ngx_add_timer(m->peer.connection->read, /* STUB */ 5000);
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
382
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
383 /* STUB handle event */
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
384
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
385 return NGX_OK;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
386 }
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
387
645
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
388
653
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
389 static void
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
390 ngx_mysql_read_query_result(ngx_event_t *rev)
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
391 {
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
392 ssize_t n, len;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
393 ngx_str_t msg;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
394 ngx_mysql_t *m;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
395 ngx_connection_t *c;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
396 ngx_mysql_error_pkt_t *epkt;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
397 ngx_mysql_response_pkt_t *pkt;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
398
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
399 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, rev->log, 0, "mysql read query result");
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
400
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
401 c = rev->data;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
402 m = c->data;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
403
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
404 m->peer.log->action = "reading mysql read query result";
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
405
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
406 n = ngx_recv(m->peer.connection, m->buf->pos, /* STUB */ 1024);
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
407
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
408 if (n == NGX_AGAIN) {
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
409 return;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
410 }
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
411
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
412 if (n < 5) {
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
413 ngx_mysql_close(m, NGX_ERROR);
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
414 return;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
415 }
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
416
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
417 pkt = (ngx_mysql_response_pkt_t *) m->buf->pos;
645
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
418
653
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
419 len = ngx_m24toh(pkt->pktlen);
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
420
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
421 if (len > n - 4) {
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
422 ngx_log_error(NGX_LOG_ERR, rev->log, 0,
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
423 "mysql server %V sent incomplete response packet",
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
424 m->peer.name);
653
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
425
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
426 ngx_mysql_close(m, NGX_ERROR);
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
427 return;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
428 }
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
429
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
430 if (pkt->fields != 0xff) {
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
431 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, rev->log, 0, "mysql query OK");
645
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
432
653
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
433 m->state = NGX_OK;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
434 m->pktn = pkt->pktn;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
435
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
436 m->handler(m);
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
437
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
438 return;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
439 }
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
440
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
441 epkt = (ngx_mysql_error_pkt_t *) pkt;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
442
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
443 msg.len = (u_char *) epkt + 4 + len - epkt->message;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
444 msg.data = epkt->message;
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
445
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
446 ngx_log_error(NGX_LOG_ERR, rev->log, 0,
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
447 "mysql server %V sent error (%ud): \"%V\"",
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 653
diff changeset
448 m->peer.name, ngx_m16toh(epkt->code), &msg);
653
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
449
7cbef16c71a1 nginx-0.3.48-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
450 ngx_mysql_close(m, NGX_ERROR);
645
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
451 }
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
452
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
453
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
454 static void
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
455 ngx_mysql_close(ngx_mysql_t *m, ngx_int_t rc)
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
456 {
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
457 if (rc == NGX_ERROR) {
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
458 ngx_close_connection(m->peer.connection);
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
459 }
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
460
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
461 m->state = rc;
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
462
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
463 m->handler(m);
4946078f0a79 nginx-0.3.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
464 }