1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
#include "sapp_api.h"
#include "sapp_private_api.h"
#include "sapp_declaration.h"
#include "stream_inc/sapp_inject.h"
#ifdef __cplusplus
extern "C" {
#endif
/*
MESA_kill_tcpʵ�����ȹ���õ�ǰ���IP, TCPͷ��,
�����Ҫ����ָ����Ϣ, Ҳ��дһ��assistantģ��, ��ô����ipttl, ipid, tcpwin��ֵ.
Ȼ�����__sapp_inject_pkt(), sio = SIO_EXCLUDE_THIS_LAYER_HDR.
sapp����ֱ�Ӹ���ij��ͷ���ֶ���ô��ֵ, ��assistantģ�鸺��, sapp�����հ�����������.
kill_remedyҲ�ǿ�assistant���ݵ�ǰseq, ����rst����seq, ���Ƶ��fd���ɹ�, ��Ҫ����Ӷ���.
����assistant����.
*/
int sapp_inject_pkt(struct streaminfo *stream, enum sapp_inject_opt sio, const void *payload, int payload_len, unsigned char snd_routedir)
{
int ret;
char debug_log_buf[256];
UCHAR send_stream_dir;
const struct streaminfo_private *stream_pr = (struct streaminfo_private *)stream;
ret = __sapp_inject_pkt(stream, sio, payload, payload_len, snd_routedir, NULL);
if(MESA_handle_runtime_log_level_enabled(ABBR_SAPP_LOG_HANDLE, RLOG_LV_DEBUG)){
int log_level;
const char *string_res;
/* injectʹ�õ���routedir, �˴�ת����stream dir,
ע��: ��������Ķ������ܲ����ɵ�ǰ��������, ����kni, �Ǵ����������յ����ݰ�, ��ע����·��,
���ܴ�raw_pkt��raw_stream->routedir�жϷ���,
Ҫ������������ʷ��¼���ж�route_dir��stream_dir�Ĺ�ϵ!!!!
*/
if(stream_pr->stream_c2s_route_dir == snd_routedir){
send_stream_dir = DIR_C2S;
}else{
send_stream_dir = DIR_S2C;
}
if(ret < 0){
log_level = RLOG_LV_FATAL;
string_res = "error";
}else{
log_level = RLOG_LV_DEBUG;
string_res = "succ";
}
if(SIO_EXCLUDE_THIS_LAYER_HDR & sio){
/* ipԭʼ����ҵ�������й��� */
if(ADDR_TYPE_IPV4 == stream->addr.addrtype){
const struct mesa_ip4_hdr *ip4hdr = (struct mesa_ip4_hdr *)payload;
sapp_runtime_log(log_level, "sapp_inject_pkt()->IPV4 %s, exclude ip header, stream:%s, stream_curdir:%d, stream_cur_routedir:%d, stream_C2S_routedir:%d, send_ipv4_pkt_hdr:%s, send_routedir:%d, send_stream_dir:%d, send_payload_len:%d, ttl:%d, ipid:%u, ip_checksum:0x%x",
string_res, printaddr(&stream->addr, stream->threadnum),
stream->curdir, stream->routedir, stream_pr->stream_c2s_route_dir,
sapp_raw_ipv4_ntop(ip4hdr, debug_log_buf, sizeof(debug_log_buf)),
snd_routedir, send_stream_dir, payload_len,
ip4hdr->ip_ttl, ntohs(ip4hdr->ip_id), ntohs(ip4hdr->ip_sum));
}else{
const struct mesa_ip6_hdr *ip6hdr = (struct mesa_ip6_hdr *)payload;
sapp_runtime_log(log_level, "sapp_inject_pkt()->IPV6 %s, exclude ip header, stream:%s, stream_curdir:%d, stream_cur_routedir:%d,stream_C2S_routedir:%d, send_ipv6_pkt_hdr:%s, send_routedir:%d, send_stream_dir:%d, send_payload_len:%d,ttl:%d",
string_res, printaddr(&stream->addr, stream->threadnum),
stream->curdir, stream->routedir, stream_pr->stream_c2s_route_dir,
sapp_raw_ipv6_ntop(ip6hdr, debug_log_buf, sizeof(debug_log_buf)),
snd_routedir, send_stream_dir, payload_len, ip6hdr->ip6_hop);
}
}else{
/* ���ֻ����Ӧ�ò㸺�ؼ�ָ����������, ip��ͷ��sapp���� */
sapp_runtime_log(log_level, "sapp_inject_pkt() with SIO_DEFAULT %s, stream:%s, stream_curdir:%d, stream_cur_routedir:%d, stream_C2S_routedir:%d, send_routedir:%d, send_stream_dir:%d, send_payload_len:%d",
string_res, printaddr(&stream->addr, stream->threadnum),
stream->curdir, stream->routedir, stream_pr->stream_c2s_route_dir,
snd_routedir, send_stream_dir, payload_len);
}
}
return ret;
}
int sapp_inject_ctrl_pkt(struct streaminfo *stream, enum sapp_inject_opt sio, const void *payload, int payload_len, unsigned char snd_routedir)
{
return __sapp_inject_ctrl_pkt(stream, sio, payload, payload_len, snd_routedir);
}
extern int marsio_send_ctrl_data(unsigned char *data,int datalen, struct segment_id_list *sids, int thread_seq);
int sapp_inject_ctrl_data(unsigned char *data,int datalen, struct segment_id_list *sids, int thread_seq)
{
return marsio_send_ctrl_data(data, datalen, sids, thread_seq);
}
#ifdef __cplusplus
}
#endif
|