00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "MP3HTTPSource.hh"
00022 #include "GroupsockHelper.hh"
00023 #include "MP3StreamState.hh"
00024
00025 MP3HTTPSource* MP3HTTPSource::createNew(UsageEnvironment& env,
00026 NetAddress const& remoteAddress,
00027 Port remotePort,
00028 char const* remoteHostName,
00029 char const* fileName) {
00030 int ourSocket = -1;
00031 MP3HTTPSource* newSource = NULL;
00032
00033 do {
00034
00035
00036
00037 ourSocket = setupStreamSocket(env, 0, False);
00038 if (ourSocket < 0) break;
00039
00040
00041 MAKE_SOCKADDR_IN(remoteName, *(unsigned*)(remoteAddress.data()), remotePort.num());
00042 if (connect(ourSocket, (struct sockaddr*)&remoteName, sizeof remoteName)
00043 != 0) {
00044 env.setResultErrMsg("connect() failed: ");
00045 break;
00046 }
00047
00048
00049 if (!increaseReceiveBufferTo(env, ourSocket, 100*1024)) break;
00050
00051
00052 unsigned streamLength = 0;
00053 FILE* fid = NULL;
00054 #if !defined(IMN_PIM) && !defined(CRIS) && !defined(_WIN32_WCE)
00055 fid = fdopen(ourSocket, "r+b");
00056 #endif
00057 if (fid == NULL) {
00058
00059
00060
00061 long ourSocket_long = (long)ourSocket;
00062 fid = (FILE*)ourSocket_long;
00063 streamLength = (unsigned)(-1);
00064 }
00065
00066 newSource = new MP3HTTPSource(env, fid);
00067 if (newSource == NULL) break;
00068
00069 newSource->assignStream(fid, streamLength);
00070
00071
00072 newSource->writeGetCmd(remoteHostName, ntohs(remotePort.num()),
00073 fileName);
00074
00075
00076 if (!newSource->initializeStream()) break;
00077
00078 return newSource;
00079 } while (0);
00080
00081 if (ourSocket != -1) ::closeSocket(ourSocket);
00082 Medium::close(newSource);
00083 return NULL;
00084 }
00085
00086 MP3HTTPSource::MP3HTTPSource(UsageEnvironment& env, FILE* fid)
00087 : MP3FileSource(env, fid) {
00088 }
00089
00090 MP3HTTPSource::~MP3HTTPSource() {
00091 }
00092
00093 void MP3HTTPSource::writeGetCmd(char const* hostName, unsigned portNum,
00094 char const* fileName) {
00095 streamState()->writeGetCmd(hostName, portNum, fileName);
00096 }