1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

For #1488, pass client ip to http callback.3.0.85

This commit is contained in:
winlin 2019-12-26 11:42:19 +08:00
commit 316cab794a
7 changed files with 56 additions and 1 deletions

View file

@ -198,6 +198,10 @@ int SrsConnection::srs_id()
return trd->cid();
}
string SrsConnection::remote_ip() {
return ip;
}
void SrsConnection::expire()
{
trd->interrupt();

View file

@ -93,6 +93,8 @@ public:
public:
// Get the srs id which identify the client.
virtual int srs_id();
// Get the remote ip of peer.
virtual std::string remote_ip();
// Set connection to expired.
virtual void expire();
protected:

View file

@ -49,6 +49,7 @@ using namespace std;
#include <srs_kernel_buffer.hpp>
#include <srs_protocol_amf0.hpp>
#include <srs_kernel_utility.hpp>
#include <srs_http_stack.hpp>
// the longest time to wait for a process to quit.
#define SRS_PROCESS_QUIT_TIMEOUT_MS 1000
@ -1273,3 +1274,34 @@ void srs_api_dump_summaries(SrsJsonObject* obj)
sys->set("conn_srs", SrsJsonAny::integer(nrs->nb_conn_srs));
}
string srs_get_original_ip(ISrsHttpMessage* r)
{
string x_forwarded_for, x_real_ip;
for (int i = 0; i < r->request_header_count(); i++) {
string k = r->request_header_key_at(i);
if (k == "X-Forwarded-For") {
x_forwarded_for = r->request_header_value_at(i);
} else if (k == "X-Real-IP") {
x_real_ip = r->request_header_value_at(i);
}
}
if (!x_forwarded_for.empty()) {
size_t pos = string::npos;
if ((pos = x_forwarded_for.find(",")) == string::npos) {
return x_forwarded_for;
}
return x_forwarded_for.substr(0, pos);
}
if (!x_real_ip.empty()) {
size_t pos = string::npos;
if ((pos = x_real_ip.find(":")) == string::npos) {
return x_real_ip;
}
return x_real_ip.substr(0, pos);
}
return "";
}

View file

@ -40,6 +40,7 @@
class SrsKbps;
class SrsBuffer;
class SrsJsonObject;
class ISrsHttpMessage;
// Convert level in string to log level in int.
// @return the log level defined in SrsLogLevel.
@ -649,5 +650,8 @@ extern bool srs_is_boolean(const std::string& str);
// Dump summaries for /api/v1/summaries.
extern void srs_api_dump_summaries(SrsJsonObject* obj);
// Get the original ip from query and header by proxy.
extern std::string srs_get_original_ip(ISrsHttpMessage* r);
#endif