Skip to content

Commit

Permalink
Merge pull request #27 from kedixa/dev
Browse files Browse the repository at this point in the history
add get_peer_addr for network task
  • Loading branch information
Barenboim committed Dec 24, 2021
2 parents 5c241dd + 31b4c9d commit 6cf00a0
Show file tree
Hide file tree
Showing 8 changed files with 33 additions and 1 deletion.
2 changes: 2 additions & 0 deletions doc/http.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,8 @@
- set_send_timeout(int) -> None
- set_receive_timeout(int) -> None
- set_keep_alive(int) -> None
- get_peer_addr() -> tuple(str, int)
- 返回元组(ip, port),若获取失败则ip为空字符串
- set_callback(Callable[[wf.HttpTask], None]) -> None
- set_user_data(object) -> None
- get_user_data() -> object
Expand Down
2 changes: 2 additions & 0 deletions doc/mysql.md
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,8 @@ mysqls://localhost/db1?character\_set=big5
- set_send_timeout(int) -> None
- set_receive_timeout(int) -> None
- set_keep_alive(int) -> None
- get_peer_addr() -> tuple(str, int)
- 返回元组(ip, port),若获取失败则ip为空字符串
- set_callback(Callable[[wf.MySQLTask], None]) -> None
- set_user_data(object) -> None
- get_user_data() -> object
Expand Down
2 changes: 2 additions & 0 deletions doc/redis.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,8 @@
- set_send_timeout(int) -> None
- set_receive_timeout(int) -> None
- set_keep_alive(int) -> None
- get_peer_addr() -> tuple(str, int)
- 返回元组(ip, port),若获取失败则ip为空字符串
- set_callback(Callable[[wf.RedisTask], None]) -> None
- set_user_data(object) -> None
- get_user_data() -> object
Expand Down
1 change: 1 addition & 0 deletions src/http_types.cc
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ void init_http_types(py::module_ &wf) {
.def("set_send_timeout", &PyWFHttpTask::set_send_timeout)
.def("set_receive_timeout", &PyWFHttpTask::set_receive_timeout)
.def("set_keep_alive", &PyWFHttpTask::set_keep_alive)
.def("get_peer_addr", &PyWFHttpTask::get_peer_addr)
.def("set_callback", &PyWFHttpTask::set_callback)
.def("set_user_data", &PyWFHttpTask::set_user_data)
.def("get_user_data", &PyWFHttpTask::get_user_data)
Expand Down
1 change: 1 addition & 0 deletions src/mysql_types.cc
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,7 @@ void init_mysql_types(py::module_ &wf) {
.def("set_send_timeout", &PyWFMySQLTask::set_send_timeout)
.def("set_receive_timeout", &PyWFMySQLTask::set_receive_timeout)
.def("set_keep_alive", &PyWFMySQLTask::set_keep_alive)
.def("get_peer_addr", &PyWFMySQLTask::get_peer_addr)
.def("set_callback", &PyWFMySQLTask::set_callback)
.def("set_user_data", &PyWFMySQLTask::set_user_data)
.def("get_user_data", &PyWFMySQLTask::get_user_data)
Expand Down
23 changes: 23 additions & 0 deletions src/network_types.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#ifndef PYWF_NETWORK_TYPES_H
#define PYWF_NETWORK_TYPES_H
#include <arpa/inet.h>

#include "common_types.h"
#include "workflow/HttpMessage.h"
#include "workflow/HttpUtil.h"
Expand Down Expand Up @@ -47,6 +49,27 @@ class PyWFNetworkTask : public PySubTask {
void set_receive_timeout(int t) { this->get()->set_receive_timeout(t); }
void set_keep_alive(int t) { this->get()->set_keep_alive(t); }

py::object get_peer_addr() const {
char ip_str[INET6_ADDRSTRLEN + 1] = { 0 };
struct sockaddr_storage addr;
socklen_t addrlen = sizeof (addr);
uint16_t port = 0;

if (this->get()->get_peer_addr((struct sockaddr *)&addr, &addrlen) == 0) {
if (addr.ss_family == AF_INET) {
struct sockaddr_in *sin = (struct sockaddr_in *)(&addr);
inet_ntop(AF_INET, &sin->sin_addr, ip_str, addrlen);
port = ntohs(sin->sin_port);
}
else if (addr.ss_family == AF_INET6) {
struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)(&addr);
inet_ntop(AF_INET6, &sin6->sin6_addr, ip_str, addrlen);
port = ntohs(sin6->sin6_port);
}
}
return py::make_tuple(py::str(ip_str), py::int_(port));
}

void set_callback(_py_callback_t cb) {
// The deleter will destruct both cb and user_data,
// but now we just want to reset cb, so we must clear user_data first,
Expand Down
1 change: 1 addition & 0 deletions src/redis_types.cc
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,7 @@ void init_redis_types(py::module_ &wf) {
.def("set_send_timeout", &PyWFRedisTask::set_send_timeout)
.def("set_receive_timeout", &PyWFRedisTask::set_receive_timeout)
.def("set_keep_alive", &PyWFRedisTask::set_keep_alive)
.def("get_peer_addr", &PyWFRedisTask::get_peer_addr)
.def("set_callback", &PyWFRedisTask::set_callback)
.def("set_user_data", &PyWFRedisTask::set_user_data)
.def("get_user_data", &PyWFRedisTask::get_user_data)
Expand Down

0 comments on commit 6cf00a0

Please sign in to comment.