Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit2743b65

Browse files
committed
buffer optimizations
1 parentea0b62b commit2743b65

File tree

3 files changed

+24
-44
lines changed

3 files changed

+24
-44
lines changed

‎Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎examples/proxy.rs

Lines changed: 2 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -70,35 +70,8 @@ struct DemoHandler {}
7070
implPacketHandlerforDemoHandler{
7171

7272
fnhandle_request(&self,p:&Packet) ->Action{
73-
print_packet_chars(&p.bytes);
74-
match p.packet_type(){
75-
Ok(PacketType::ComQuery) =>{
76-
77-
// ComQuery packets just contain a SQL string as the payload
78-
let slice =&p.bytes[5..];
79-
80-
// convert the slice to a String object
81-
let sql =String::from_utf8(slice.to_vec()).expect("Invalid UTF-8");
82-
83-
// log the query
84-
println!("SQL: {}", sql);
85-
86-
// dumb example of conditional proxy behavior
87-
if sql.contains("avocado"){
88-
// take over processing of this packet and return an error packet
89-
// to the client
90-
Action::Respond(vec![Packet::error_packet(
91-
1064,// error code
92-
[0x31,0x32,0x33,0x34,0x35],// sql state
93-
String::from("Proxy rejecting any avocado-related queries"))])
94-
}else{
95-
// pass the packet to MySQL unmodified
96-
Action::Forward
97-
}
98-
},
99-
// pass the packet to MySQL unmodified
100-
_ =>Action::Forward
101-
}
73+
//
74+
Action::Forward
10275
}
10376

10477
fnhandle_response(&self, _:&Packet) ->Action{

‎src/lib.rs

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -193,15 +193,17 @@ impl ConnReader {
193193
letmut temp:Vec<u8> =Vec::with_capacity(s);
194194
temp.extend_from_slice(&self.read_buf[0..s]);
195195
let p =Packet{bytes: temp};
196-
197-
// shift data down
198-
letmut j =0;
199-
for iin s ..self.read_pos{
200-
self.read_buf[j] =self.read_buf[i];
201-
j +=1;
196+
ifself.read_pos == s{
197+
self.read_pos =0;
198+
}else{
199+
// shift data down
200+
letmut j =0;
201+
for iin s ..self.read_pos{
202+
self.read_buf[j] =self.read_buf[i];
203+
j +=1;
204+
}
205+
self.read_pos -= s;
202206
}
203-
self.read_pos -= s;
204-
205207
Some(p)
206208
}else{
207209
None
@@ -236,13 +238,18 @@ impl ConnWriter {
236238
matchself.stream.poll_write(){
237239
Async::Ready(_) =>{
238240
let s = try!((&*self.stream).write(&self.write_buf[0..self.write_pos]));
239-
240-
letmut j =0;
241-
for iin s..self.write_pos{
242-
self.write_buf[j] =self.write_buf[i];
243-
j +=1;
241+
if s ==self.write_pos{
242+
self.write_pos =0;
243+
}else{
244+
// for a partial write, shift data down
245+
letmut j =0;
246+
for iin s..self.write_pos{
247+
self.write_buf[j] =self.write_buf[i];
248+
j +=1;
249+
}
250+
self.write_pos -= s;
244251
}
245-
self.write_pos -= s;
252+
246253
},
247254
_ =>returnOk(Async::NotReady)
248255
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp