MCPcopy Create free account
hub / github.com/Meituan-Dianping/SQLAdvisor / sendData

Function sendData

extra/yassl/src/handshake.cpp:975–1028  ·  view source on GitHub ↗

send data

Source from the content-addressed store, hash-verified

973
974// send data
975int sendData(SSL& ssl, const void* buffer, int sz)
976{
977 int sent = 0;
978
979 if (ssl.GetError() == YasslError(SSL_ERROR_WANT_READ))
980 ssl.SetError(no_error);
981
982 if (ssl.GetError() == YasslError(SSL_ERROR_WANT_WRITE)) {
983 ssl.SetError(no_error);
984 ssl.SendWriteBuffered();
985 if (!ssl.GetError()) {
986 // advance sent to prvevious sent + plain size just sent
987 sent = ssl.useBuffers().prevSent + ssl.useBuffers().plainSz;
988 }
989 }
990
991 ssl.verfiyHandShakeComplete();
992 if (ssl.GetError()) return -1;
993
994 for (;;) {
995 int len = min(sz - sent, MAX_RECORD_SIZE);
996 output_buffer out;
997 input_buffer tmp;
998
999 Data data;
1000
1001 if (sent == sz) break;
1002
1003 if (ssl.CompressionOn()) {
1004 if (Compress(static_cast<const opaque*>(buffer) + sent, len,
1005 tmp) == -1) {
1006 ssl.SetError(compress_error);
1007 return -1;
1008 }
1009 data.SetData(tmp.get_size(), tmp.get_buffer());
1010 }
1011 else
1012 data.SetData(len, static_cast<const opaque*>(buffer) + sent);
1013
1014 buildMessage(ssl, out, data);
1015 ssl.Send(out.get_buffer(), out.get_size());
1016
1017 if (ssl.GetError()) {
1018 if (ssl.GetError() == YasslError(SSL_ERROR_WANT_WRITE)) {
1019 ssl.useBuffers().plainSz = len;
1020 ssl.useBuffers().prevSent = sent;
1021 }
1022 return -1;
1023 }
1024 sent += len;
1025 }
1026 ssl.useLog().ShowData(sent, true);
1027 return sent;
1028}
1029
1030
1031// send alert

Callers 2

WriteMethod · 0.85
SSL_writeFunction · 0.85

Calls 14

YasslErrorEnum · 0.85
minFunction · 0.85
CompressFunction · 0.85
buildMessageFunction · 0.85
SendWriteBufferedMethod · 0.80
CompressionOnMethod · 0.80
SetDataMethod · 0.80
get_sizeMethod · 0.80
SendMethod · 0.80
ShowDataMethod · 0.80
GetErrorMethod · 0.45

Tested by

no test coverage detected