mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-13 21:35:39 +00:00
Bug 1026923 - [RTSP] Change the User-Agent string of RTSP client. r=sworkman
This commit is contained in:
parent
c152f140c3
commit
4fb0600a31
@ -17,6 +17,7 @@
|
||||
#include "nsIProtocolProxyService.h"
|
||||
#include "nsIProxyInfo.h"
|
||||
#include "nsIProxiedChannel.h"
|
||||
#include "nsIHttpProtocolHandler.h"
|
||||
|
||||
#include "nsAutoPtr.h"
|
||||
#include "nsStandardURL.h"
|
||||
@ -200,7 +201,8 @@ RtspController::AsyncOpen(nsIStreamingProtocolListener *aListener)
|
||||
LOG(("RtspController AsyncOpen uri=%s", uriSpec.get()));
|
||||
|
||||
if (!mRtspSource.get()) {
|
||||
mRtspSource = new android::RTSPSource(this, uriSpec.get(), false, 0);
|
||||
mRtspSource = new android::RTSPSource(this, uriSpec.get(),
|
||||
mUserAgent.get(), false, 0);
|
||||
}
|
||||
// Connect to Rtsp Server.
|
||||
mRtspSource->start();
|
||||
@ -366,6 +368,14 @@ RtspController::Init(nsIURI *aURI)
|
||||
|
||||
mURI = aURI;
|
||||
|
||||
// Get User-Agent.
|
||||
nsCOMPtr<nsIHttpProtocolHandler>
|
||||
service(do_GetService(NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX "http", &rv));
|
||||
rv = service->GetUserAgent(mUserAgent);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
@ -40,6 +40,8 @@ private:
|
||||
nsCOMPtr<nsIStreamingProtocolListener> mListener;
|
||||
// ASCII encoded URL spec.
|
||||
nsCString mSpec;
|
||||
// UserAgent string.
|
||||
nsCString mUserAgent;
|
||||
// Indicate the connection state between the
|
||||
// media streaming server and the Rtsp client.
|
||||
State mState;
|
||||
|
@ -61,7 +61,6 @@ ARTSPConnection::ARTSPConnection(bool uidValid, uid_t uid)
|
||||
mReceiveResponseEventPending(false),
|
||||
mSocket(nullptr),
|
||||
mNumSocketPollTimeoutRetries(0) {
|
||||
MakeUserAgent(&mUserAgent);
|
||||
}
|
||||
|
||||
ARTSPConnection::~ARTSPConnection() {
|
||||
@ -200,6 +199,13 @@ bool ARTSPConnection::ParseURL(
|
||||
return true;
|
||||
}
|
||||
|
||||
void ARTSPConnection::MakeUserAgent(const char *userAgent) {
|
||||
mUserAgent.clear();
|
||||
mUserAgent.setTo("User-Agent: ");
|
||||
mUserAgent.append(userAgent);
|
||||
mUserAgent.append("\r\n");
|
||||
}
|
||||
|
||||
static status_t MakeSocketBlocking(PRFileDesc *fd, bool blocking) {
|
||||
// Check if socket is closed.
|
||||
if (!fd) {
|
||||
@ -1062,21 +1068,6 @@ void ARTSPConnection::addAuthentication(AString *request) {
|
||||
request->insert(fragment, i + 2);
|
||||
}
|
||||
|
||||
// static
|
||||
void ARTSPConnection::MakeUserAgent(AString *userAgent) {
|
||||
userAgent->clear();
|
||||
userAgent->setTo("User-Agent: stagefright/1.1 (Linux;Android ");
|
||||
|
||||
#if (PROPERTY_VALUE_MAX < 8)
|
||||
#error "PROPERTY_VALUE_MAX must be at least 8"
|
||||
#endif
|
||||
|
||||
char value[PROPERTY_VALUE_MAX];
|
||||
property_get("ro.build.version.release", value, "Unknown");
|
||||
userAgent->append(value);
|
||||
userAgent->append(")\r\n");
|
||||
}
|
||||
|
||||
void ARTSPConnection::addUserAgent(AString *request) const {
|
||||
// Find the boundary between headers and the body.
|
||||
ssize_t i = request->find("\r\n\r\n");
|
||||
|
@ -48,6 +48,7 @@ struct ARTSPConnection : public AHandler {
|
||||
static bool ParseURL(
|
||||
const char *url, AString *host, uint16_t *port, AString *path,
|
||||
AString *user, AString *pass);
|
||||
void MakeUserAgent(const char *userAgent);
|
||||
|
||||
protected:
|
||||
virtual ~ARTSPConnection();
|
||||
@ -128,8 +129,6 @@ private:
|
||||
static bool ParseSingleUnsignedLong(
|
||||
const char *from, unsigned long *x);
|
||||
|
||||
static void MakeUserAgent(AString *userAgent);
|
||||
|
||||
void closeSocket();
|
||||
|
||||
DISALLOW_EVIL_CONSTRUCTORS(ARTSPConnection);
|
||||
|
@ -54,19 +54,6 @@ static int64_t kDefaultKeepAliveTimeoutUs = 60000000ll;
|
||||
|
||||
namespace android {
|
||||
|
||||
static void MakeUserAgentString(AString *s) {
|
||||
s->setTo("stagefright/1.1 (Linux;Android ");
|
||||
|
||||
#if (PROPERTY_VALUE_MAX < 8)
|
||||
#error "PROPERTY_VALUE_MAX must be at least 8"
|
||||
#endif
|
||||
|
||||
char value[PROPERTY_VALUE_MAX];
|
||||
property_get("ro.build.version.release", value, "Unknown");
|
||||
s->append(value);
|
||||
s->append(")");
|
||||
}
|
||||
|
||||
static bool GetAttribute(const char *s, const char *key, AString *value) {
|
||||
value->clear();
|
||||
|
||||
@ -110,9 +97,11 @@ struct RtspConnectionHandler : public AHandler {
|
||||
|
||||
RtspConnectionHandler(
|
||||
const char *url,
|
||||
const char *userAgent,
|
||||
const sp<AMessage> ¬ify,
|
||||
bool uidValid = false, uid_t uid = 0)
|
||||
: mNotify(notify),
|
||||
: mUserAgent(userAgent),
|
||||
mNotify(notify),
|
||||
mUIDValid(uidValid),
|
||||
mUID(uid),
|
||||
mNetLooper(new ALooper),
|
||||
@ -161,6 +150,7 @@ struct RtspConnectionHandler : public AHandler {
|
||||
}
|
||||
|
||||
mSessionHost = host;
|
||||
mConn->MakeUserAgent(mUserAgent.c_str());
|
||||
}
|
||||
|
||||
void connect() {
|
||||
@ -272,7 +262,8 @@ struct RtspConnectionHandler : public AHandler {
|
||||
buf->setRange(0, buf->size() + 8);
|
||||
}
|
||||
|
||||
static void addSDES(PRFileDesc *s, const sp<ABuffer> &buffer) {
|
||||
static void addSDES(PRFileDesc *s, const sp<ABuffer> &buffer,
|
||||
const char *userAgent) {
|
||||
PRNetAddr addr;
|
||||
CHECK_EQ(PR_GetSockName(s, &addr), PR_SUCCESS);
|
||||
|
||||
@ -300,7 +291,7 @@ struct RtspConnectionHandler : public AHandler {
|
||||
data[offset++] = 6; // TOOL
|
||||
|
||||
AString tool;
|
||||
MakeUserAgentString(&tool);
|
||||
tool.setTo(userAgent);
|
||||
|
||||
data[offset++] = tool.size();
|
||||
|
||||
@ -400,7 +391,7 @@ struct RtspConnectionHandler : public AHandler {
|
||||
sp<ABuffer> buf = new ABuffer(65536);
|
||||
buf->setRange(0, 0);
|
||||
addRR(buf);
|
||||
addSDES(rtpSocket, buf);
|
||||
addSDES(rtpSocket, buf, mUserAgent.c_str());
|
||||
|
||||
addr.inet.port = PR_htons(rtpPort);
|
||||
|
||||
@ -1381,6 +1372,7 @@ private:
|
||||
bool mCheckPendings;
|
||||
};
|
||||
|
||||
AString mUserAgent;
|
||||
sp<AMessage> mNotify;
|
||||
bool mUIDValid;
|
||||
uid_t mUID;
|
||||
|
@ -38,9 +38,11 @@ namespace android {
|
||||
RTSPSource::RTSPSource(
|
||||
nsIStreamingProtocolListener *aListener,
|
||||
const char *url,
|
||||
const char *userAgent,
|
||||
bool uidValid,
|
||||
uid_t uid)
|
||||
: mURL(url),
|
||||
mUserAgent(userAgent),
|
||||
mUIDValid(uidValid),
|
||||
mUID(uid),
|
||||
mState(DISCONNECTED),
|
||||
@ -80,7 +82,8 @@ void RTSPSource::start()
|
||||
|
||||
sp<AMessage> notify = new AMessage(kWhatNotify, mReflector->id());
|
||||
|
||||
mHandler = new RtspConnectionHandler(mURL.c_str(), notify, mUIDValid, mUID);
|
||||
mHandler = new RtspConnectionHandler(mURL.c_str(), mUserAgent.c_str(),
|
||||
notify, mUIDValid, mUID);
|
||||
mLooper->registerHandler(mHandler);
|
||||
|
||||
CHECK_EQ(mState, (int)DISCONNECTED);
|
||||
|
@ -43,6 +43,7 @@ public:
|
||||
RTSPSource(
|
||||
nsIStreamingProtocolListener *aListener,
|
||||
const char *url,
|
||||
const char *userAgent,
|
||||
bool uidValid = false,
|
||||
uid_t uid = 0);
|
||||
|
||||
@ -109,6 +110,7 @@ private:
|
||||
};
|
||||
|
||||
AString mURL;
|
||||
AString mUserAgent;
|
||||
bool mUIDValid;
|
||||
uid_t mUID;
|
||||
State mState;
|
||||
|
Loading…
Reference in New Issue
Block a user