Hi all.
I have been making MySQL client program.
Refer to MySQL protocol spec, packet data is defined like this.
This means that it is necessary to insert some odd bytes integer number and some null terminated strings into one binary data.
I tried many time for example like below, but couldn't insert these data into one binary data correctly.
Please tell me how to implement in this case?
I'm sorry in poor writing, because I'm studying English.
MySQL Protocol Spec
Bytes Name
----- ----
3 Packet Length
1 Packet Number
Bytes Name
----- ----
4 client_flags
4 max_packet_size
1 charset_number
23 (filler) always 0x00...
n (Null-Terminated String) user
n (Length Coded Binary) scramble_buff (1 + x bytes)
n (Null-Terminated String) databasename (optional)
My code
typedef unsigned char byte;
struct pacHeader {
byte Len[3];
byte Num;
};
struct pacCliAuth {
byte Flag[4];
byte Size[4];
byte CSet;
byte Fill[23];
};
class DATA {
protected:
byte BUF[1024];
int mEndPoint;
public:
DATA() {
mEndPoint = 0;
};
void Set(byte* data, int size) {
for (int i = 0; i < size; i++) {
BUF[mEndPoint+i] = (byte) data[i];
}
mEndPoint = mEndPoint+size;
}
void SetNull(int num) {
for (int i = 0; i < num; i++) {
BUF[mEndPoint+i] = 0x00;
}
mEndPoint = mEndPoint+num;
};
char* GetStr() {
return (char*) BUF;
}
};
main() {
string user = "user";
string db = "test_db";
pacCliAuth pacAuth;
*pacAuth.Flag = (0x86, 0x09, 0x00, 0x00); // 0x86090000
*pacAuth.Size = (0x00, 0x00, 0x02, 0x00); // 512
pacAuth.CSet = 8;
pacHeader pacHead;
int len = sizeof(pacHead) + sizeof(pacAuth) + user.size() + db.size() + 3;
*pacHead.Len = (0x00, 0x00, len);
pacHead.Num = 1;
DATA data;
data.Set(pacHead.Len, 3);
data.Set(&pacHead.Num, 1);
data.Set(pacAuth.Flag, 4);
data.Set(pacAuth.Size, 4);
data.Set(&pacAuth.CSet, 1);
data.SetNull(23);
data.Set((byte*)user.c_str(), user.size());
data.SetNull(2);
data.Set((byte*)db.c_str(), db.size());
data.SetNull(1);
Buf = data.GetStr();
for (int i = 0; i < len; i++) {
printf("%02x",Buf[i]);
}
}
Hi all.
I have been making MySQL client program. Refer to MySQL protocol spec, packet data is defined like this.
This means that it is necessary to insert some odd bytes integer number and some null terminated strings into one binary data. I tried many time for example like below, but couldn't insert these data into one binary data correctly. Please tell me how to implement in this case?
I'm sorry in poor writing, because I'm studying English.
MySQL Protocol Spec
My code