コード例 #1
0
ファイル: stdlibx.cpp プロジェクト: gawadepd/kh323phone
int  _rmdir(const char *sDir)
{	
	USES_CONVERSION;
        PString folderName = sDir;

        if (folderName[folderName.GetLength() - 1] == PDIR_SEPARATOR) {
            folderName.Delete(folderName.GetLength() - 1, 1);
        }

        return (RemoveDirectory(A2T(folderName)) ? 0 : -1);
}
コード例 #2
0
ファイル: SIDStil.cpp プロジェクト: pulkomandy/APlayer
PString SIDStil::GetBug(PString relPathToEntry, int32 tuneNo)
{
	if (baseDir.IsEmpty())
		return ("");

	// Older versions of STIL is detected
	if (stilVersion < 2.59f)
		tuneNo = 0;

	// Find out whether we have this bug entry in the buffer.
	// If the baseDir was changed, we'll have to read it in again,
	// even if it might be in the buffer already
	if ((bugBuf.Left(relPathToEntry.GetLength()) != relPathToEntry) || ((bugBuf.Find('\n') != relPathToEntry.GetLength()) && (stilVersion > 2.59f)))
	{
		// The relative pathnames don't match or they're not the same length:
		// We don't have it in the buffer, so pull it in
		try
		{
			PDirectory tempDir;

			tempDir.SetDirectory(baseDir);
			tempDir.Append("DOCUMENTS");

			bugFile->Open(tempDir.GetDirectory() + "BUGlist.txt", PFile::pModeRead | PFile::pModeShareRead);

			if (PositionToEntry(relPathToEntry, bugFile, bugDirs) == false)
			{
				// Copy the entry's name to the buffer
				bugBuf = relPathToEntry + "\n";
			}
			else
			{
				bugBuf.MakeEmpty();
				ReadEntry(bugFile, bugBuf);
			}

			bugFile->Close();
		}
		catch(PFileException e)
		{
			// Failed reading from the STIL.txt file
			bugFile->Close();
			return ("");
		}
	}

	// Put the requested field into the result string
	if (GetField(resultBug, bugBuf, tuneNo) != true)
		return ("");

	return (resultBug);
}
/** Make a call to the remote endpoint.
  */
int h323_make_call(char *dest, call_details_t *cd, call_options_t *call_options)
{
	int res;
	PString	token;
	PString	host(dest);

	if (!h323_end_point_exist()) {
		return 1;
	}

	res = endPoint->MakeCall(host, token, &cd->call_reference, call_options);
	memcpy((char *)(cd->call_token), (const unsigned char *)token, token.GetLength());
	return res;
};
コード例 #4
0
/** Make a call to the remote endpoint.
  */
int h323_make_call(char *host, call_details_t *cd, call_options_t call_options)
{
	int res;
	PString	token;
	PString dest(host);

	if (!h323_end_point_exist()) {
		return 1;
	}
	
	noFastStart = 	call_options.noFastStart;
	noH245Tunneling = call_options.noH245Tunneling;

	res = endPoint->MakeCall(dest, token, &cd->call_reference, call_options.port, call_options.callerid, call_options.callername);
	memcpy((char *)(cd->call_token), (const unsigned char *)token, token.GetLength());
	
	return res;
};
コード例 #5
0
ファイル: main.cpp プロジェクト: TeleKarma/TeleKarma
void MyProcess::Main() {
	PString aor;
	PString REGISTRAR_ADDRESS = "ekiga.net";
	PString STUN_SERVER_ADDRESS = "stun.ekiga.net";
	PString USER_NAME;
	PString PASSWORD;
	PString SIP_ADDRESS = "sip:[email protected]";
	//PString SIP_ADDRESS = "sip:*[email protected]";

	if (USER_NAME.GetLength() == 0 || PASSWORD.GetLength() == 0) {
		std::cout << "Please set your username and password in the code." << std::endl;
		return;
	}

	PTrace::Initialise(5, "log");

	MyManager manager = MyManager();
	// [Tom] TODO: Research why the NAT type is important.
	PSTUNClient::NatTypes nat = manager.SetSTUNServer(STUN_SERVER_ADDRESS);
	std::cout << "NAT type: " << nat << std::endl;

	MyPCSSEndPoint * soundEp = new MyPCSSEndPoint(manager);
	std::cout << "Sound output:" << std::endl;
	std::cout << "===================================================================" << std::endl;
	std::cout << soundEp->GetSoundChannelPlayDevice() << std::endl << std::endl;
	std::cout << "Media formats:" << std::endl;
	std::cout << "===================================================================" << std::endl;
	std::cout << soundEp->GetMediaFormats() << std::endl << std::endl;
	std::cout << "Registered formats:" << std::endl;
	std::cout << "===================================================================" << std::endl;
	std::cout << OpalMediaFormat::GetAllRegisteredMediaFormats() << std::endl << std::endl;

	MySIPEndPoint * endPoint = new MySIPEndPoint(manager);
	endPoint->SetDefaultLocalPartyName(USER_NAME);
	endPoint->StartListeners(endPoint->GetDefaultListeners());
	SIPRegister::Params params;
	params.m_registrarAddress = REGISTRAR_ADDRESS;
	params.m_addressOfRecord = USER_NAME;
	params.m_password = PASSWORD;
	std::cout << "Registering with " << params.m_registrarAddress << "; this may take a while..." << std::endl;
	endPoint->Register(params, aor);

	OpalMixerEndPoint * mixerEP = new OpalMixerEndPoint(manager, "mcu");
	OpalMixerNodeInfo * mcuNodeInfo = new OpalMixerNodeInfo;
	mcuNodeInfo->m_name = "Telekarma";
	mixerEP->SetAdHocNodeInfo(mcuNodeInfo);
	mixerEP->StartListeners(mixerEP->GetDefaultListeners());
	int i;
	for(i = 20; i > 0; i--) {
		if (endPoint->IsRegistered(aor)) {
			break;
		}
		PThread::Sleep(1000);
	}

	if (i > 0) {
		std::cout << "Registration succeeded; aor=" << aor << std::endl;
		std::cout << "Calling..." << std::endl;
		PSafePtr<OpalCall> call2 = manager.SetUpCall("mcu:*", "pc:*");
		PSafePtr<OpalCall> call = manager.SetUpCall("mcu:*", SIP_ADDRESS);
		while(!call);
//		manager.StartRecording("test.wav");
		std::cout << "Connection will automatically terminate after 15 seconds..." << std::endl;
		PThread::Sleep(15*1000);
//		manager.StopRecording();
		std::cout << "Connection automatically terminated by design." << std::endl;
		call->Clear();
		endPoint->Unregister(aor);
		while(endPoint->IsRegistered(aor));
		// [MV] maybe more to the exit/cleanup than this...
	} else {
		std::cout << "Registration attempt timed out." << std::endl;
	}
	std::cout << "Proof of concept main execution complete." << std::endl;
}
コード例 #6
0
ファイル: Resources.cpp プロジェクト: ezh/ENikiBENiki
bool Resources::Open(PString & argv0, PString & application) {
    if(!PHYSFS_init(argv0.GetPointer())) {
        PError << "failure while initialising physfs: " << PHYSFS_getLastError() << endl;
        return PFalse;
    } else {
        PTRACE(5, "successful initialize physfs");
    }
    const char* basedir = PHYSFS_getBaseDir();
    const char* userdir = PHYSFS_getUserDir();
    const char* dirsep = PHYSFS_getDirSeparator();
    char* writedir = new char[strlen(userdir) + application.GetLength() + 2];
    sprintf(writedir, "%s.%s", userdir, application.GetPointer());
    PTRACE(5, "physfs base directory: " << basedir);
    PTRACE(5, "physfs user directory: " << userdir);
    PTRACE(5, "physfs write directory: " << writedir);

    if(!PHYSFS_setWriteDir(writedir)) {
        // try to create the directory...
        char* mkdir = new char[application.GetLength()+2];
        sprintf(mkdir, ".%s", application.GetPointer());
        if(!PHYSFS_setWriteDir(userdir) || ! PHYSFS_mkdir(mkdir)) {
            delete[] writedir;
            delete[] mkdir;
            PError << "failed creating configuration directory: '" << writedir << "': " << PHYSFS_getLastError() << endl;
            return PFalse;
        }
        delete[] mkdir;

        if (!PHYSFS_setWriteDir(writedir)) {
            PError << "couldn't set configuration directory to '" << writedir << "': " << PHYSFS_getLastError() << endl;
            return PFalse;
        }
    }

    PHYSFS_addToSearchPath(writedir, 0);
    PHYSFS_addToSearchPath(basedir, 1);

    delete[] writedir;

    /* Root out archives, and add them to search path... */
    if (resourceExt != NULL) {
        char **rc = PHYSFS_enumerateFiles("/");
        char **i;
        size_t extlen = strlen(resourceExt);
        char *ext;

        for (i = rc; *i != NULL; i++) {
            size_t l = strlen(*i);
            if ((l > extlen) && ((*i)[l - extlen - 1] == '.')) {
                ext = (*i) + (l - extlen);
                if (strcasecmp(ext, resourceExt) == 0) {
                    PTRACE(5, "Add resource '" << *i << "' to search path");
                    const char *d = PHYSFS_getRealDir(*i);
                    char* str = new char[strlen(d) + strlen(dirsep) + l + 1];
                    sprintf(str, "%s%s%s", d, dirsep, *i);
                    addToSearchPath(str, 1);
                    delete[] str;
                };
            };
        };
        PHYSFS_freeList(rc);
    }
    return PTrue;
}
コード例 #7
0
ファイル: SIDStil.cpp プロジェクト: pulkomandy/APlayer
bool SIDStil::GetField(PString &result, PString buffer, int32 tuneNo, STILField field)
{
	int32 start, firstTuneNo, temp, temp2 = -1;

	// Clean out the result buffer first
	result.MakeEmpty();

	// Position pointer to the first char beyond the file designation
	start = buffer.Find('\n');
	start++;

	// Check whether this is a NULL entry or not
	if (start == 0)
		return (false);

	// Is this a multitune entry?
	firstTuneNo = buffer.Find("(#", start);

	// This is a tune designation only if the previous char was
	// a newline (ie. if the "(#" is on the beginning of a line).
	if ((firstTuneNo >= 1) && (buffer.GetAt(firstTuneNo - 1) != '\n'))
		firstTuneNo = -1;

	if (firstTuneNo == -1)
	{
		//-------------------//
		// SINGLE TUNE ENTRY //
		//-------------------//
		//
		// Is the first thing in this STIL entry the COMMENT?
		temp = buffer.Find(_COMMENT_STR, start);

		// Search for other potential fields beyond the COMMENT
		if (temp == start)
		{
			temp2 = buffer.Find(_NAME_STR, start);
			if (temp2 == -1)
			{
				temp2 = buffer.Find(_AUTHOR_STR, start);
				if (temp2 == -1)
				{
					temp2 = buffer.Find(_TITLE_STR, start);
					if (temp2 == -1)
						temp2 = buffer.Find(_ARTIST_STR, start);
				}
			}
		}

		if (temp == start)
		{
			// Yes. So it's assumed to be a file-global comment
			if ((tuneNo == 0) && ((field == all) || ((field == comment) && (temp2 == -1))))
			{
				// Simply copy the stuff in
				result = buffer.Mid(start);
				return (true);
			}
			else if ((tuneNo == 0) && (field == comment))
			{
				// Just copy the comment
				result = buffer.Mid(start, temp2 - start);
				return (true);
			}
			else if ((tuneNo == 1) && (temp2 != -1))
			{
				// A specific field was asked for
				return (GetOneField(result, buffer.Mid(temp2), field));
			}
			else
			{
				// Anything else is invalid as of v2.00
				return (false);
			}
		}
		else
		{
			// No. Handle it as a regular entry
			if ((field == all) && ((tuneNo == 0) || (tuneNo == 1)))
			{
				// The complete entry was asked for. Simply copy the stuff in
				result = buffer.Mid(start);
				return (true);
			}
			else if (tuneNo == 1)
			{
				// A specific field was asked for
				return (GetOneField(result, buffer.Mid(start), field));
			}
			else
			{
				// Anything else is invalid as of v2.00
				return (false);
			}
		}
	}
	else
	{
		//-----------------//
		// MULTITUNE ENTRY //
		//-----------------//
		int32 myTuneNo, nextTuneNo;
		PString tuneNoStr;

		// Was the complete entry asked for?
		if (tuneNo == 0)
		{
			switch (field)
			{
				case all:
				{
					// Yes. Simply copy the stuff in
					result = buffer.Mid(start);
					return (true);
				}

				case comment:
				{
					// Only the file-global comment field was asked for
					if (firstTuneNo != start)
						return (GetOneField(result, buffer.Mid(start, firstTuneNo - start), comment));
					else
						return (false);
				}

				default:
				{
					// If a specific field other than a comment is
					// asked for tuneNo=0, this is illegal
					return (false);
				}
			}
		}

		// Search for the requested tune number
		tuneNoStr.Format("(#%d)", tuneNo);
		myTuneNo = buffer.Find(tuneNoStr, start);

		if (myTuneNo != -1)
		{
			// We found the requested tune number.
			// Set the pointer beyond it
			myTuneNo = buffer.Find('\n', myTuneNo) + 1;

			// Where is the next one?
			nextTuneNo = buffer.Find("\n(#", myTuneNo);
			if (nextTuneNo == -1)
			{
				// There is no next one - set pointer to the end of entry
				nextTuneNo = buffer.GetLength();
			}
			else
			{
				// The search included the \n - go beyond it
				nextTuneNo++;
			}

			// Put the desired fields into the result (which may be 'all')
			PString tempResult;
			bool retVal;

			retVal = GetOneField(tempResult, buffer.Mid(myTuneNo, nextTuneNo - myTuneNo), field);
			result += tempResult;
			return (retVal);
		}
		else
			return (false);
	}
}
コード例 #8
0
ファイル: SIDStil.cpp プロジェクト: pulkomandy/APlayer
bool SIDStil::PositionToEntry(PString entryStr, PFile *inFile, PList<DirList *> &dirs)
{
	DirList *item = NULL;
	int32 slashIndex;
	int32 startPos;
	int32 i, count;
	int32 pathLen, entryStrLen;
	PString line;
	bool foundIt = false;
	bool globComm = false;
	bool temp;
	PCharSet_MS_WIN_1252 charSet;

	try
	{
		// Seek to the start of the file
		inFile->SeekToBegin();

		// Get the dirpath
		slashIndex = entryStr.ReverseFind('/');

		// If no slash was found, something is screwed up in the entryStr
		if (slashIndex == -1)
			return (false);

		pathLen = slashIndex + 1;

		// Determine whether a section-global comment is asked for
		entryStrLen = entryStr.GetLength();
		if (pathLen == entryStrLen)
			globComm = true;

		// Find it in the table
		count = dirs.CountItems();
		for (i = 0; i < count; i++)
		{
			item = dirs.GetItem(i);
			if (entryStr.Left(pathLen) == item->dirName)
			{
				foundIt = true;
				break;
			}
		}

		if (!foundIt)
		{
			// The directory was not found
			return (false);
		}

		// Jump to the first entry of this section
		inFile->Seek(item->position, PFile::pSeekBegin);
		foundIt = false;

		// Now find the desired entry
		do
		{
			startPos = inFile->GetPosition();
			line     = inFile->ReadLine(&charSet);

			if (inFile->IsEOF())
				break;

			// Check if it is the start of an entry
			if (!line.IsEmpty() && (line.GetAt(0) == '/'))
			{
				if (line.Left(pathLen) != item->dirName)
				{
					// We are outside the section - get out of the loop,
					// which will fail the search
					break;
				}

				// Check whether we need to find a section-global comment or
				// a specific entry
				if (globComm || (stilVersion > 2.59f))
					temp = (line == entryStr);
				else
				{
					// To be compatible with older versions of STIL, which may have
					// the tune designation on the first line of a STIL entry
					// together with the pathname
					temp = (line.Left(entryStrLen) == entryStr);
				}

				if (temp)
				{
					// Found it!
					foundIt = true;
				}
			}
		}
		while (!foundIt);

		if (foundIt)
		{
			// Reposition the file pointer back to the start of the entry
			inFile->Seek(startPos, PFile::pSeekBegin);
			return (true);
		}
	}
	catch(PFileException e)
	{
		;
	}

	return (false);
}
コード例 #9
0
ファイル: SIDStil.cpp プロジェクト: pulkomandy/APlayer
PString SIDStil::GetGlobalComment(PString relPathToEntry)
{
	PString dir;
	int32 lastSlash, pathLen;
	int32 temp;

	if (baseDir.IsEmpty())
		return ("");

	// Save the dirpath
	lastSlash = relPathToEntry.ReverseFind('/');
	if (lastSlash == -1)
		return ("");

	pathLen = lastSlash + 1;
	dir = relPathToEntry.Left(pathLen);

	// Find out whether we have this global comment in the buffer.
	// If the baseDir was changed, we'll have to read it in again,
	// even if it might be in the buffer already
	if ((globalBuf.Left(dir.GetLength()) != dir) || ((globalBuf.Find('\n') != pathLen) && (stilVersion > 2.59f)))
	{
		// The relative pathnames don't match or they're not the same length:
		// We don't have it in the buffer, so pull it in
		try
		{
			PDirectory tempDir;

			tempDir.SetDirectory(baseDir);
			tempDir.Append("DOCUMENTS");

			stilFile->Open(tempDir.GetDirectory() + "STIL.txt", PFile::pModeRead | PFile::pModeShareRead);

			if (PositionToEntry(dir, stilFile, stilDirs) == false)
			{
				// Copy the dirname to the buffer
				globalBuf = dir + "\n";
			}
			else
			{
				globalBuf.MakeEmpty();
				ReadEntry(stilFile, globalBuf);
			}

			stilFile->Close();
		}
		catch(PFileException e)
		{
			// Failed reading from the STIL.txt file
			stilFile->Close();
			return ("");
		}
	}

	// Position the index to the global comment field
	temp = globalBuf.Find('\n');
	temp++;

	// Check whether this is a NULL entry or not
	if (temp == globalBuf.GetLength())
		return ("");

	return (globalBuf.Mid(temp));
}
コード例 #10
0
ファイル: SIDStil.cpp プロジェクト: pulkomandy/APlayer
bool SIDStil::GetOneField(PString &result, PString buffer, STILField field)
{
	int32 temp = -1;

	// Sanity check
	if (buffer.GetAt(buffer.GetLength() - 1) != '\n')
	{
		result.MakeEmpty();
		return (false);
	}

	switch (field)
	{
		case all:
			result += buffer;
			return (true);

		case name:
			temp = buffer.Find(_NAME_STR);
			break;

		case author:
			temp = buffer.Find(_AUTHOR_STR);
			break;

		case title:
			temp = buffer.Find(_TITLE_STR);
			break;

		case artist:
			temp = buffer.Find(_ARTIST_STR);
			break;

		case comment:
			temp = buffer.Find(_COMMENT_STR);
			break;

		default:
			break;
	}

	// If the field was not found or it is not in between 'start'
	// and 'end', it is declared a failure
	if (temp == -1)
	{
		result.MakeEmpty();
		return (false);
	}

	// Search for the end of this field. This is done by finding
	// where the next field starts
	int32 nextName, nextAuthor, nextTitle, nextArtist, nextComment, nextField;

	nextName    = buffer.Find(_NAME_STR, temp + 1);
	nextAuthor  = buffer.Find(_AUTHOR_STR, temp + 1);
	nextTitle   = buffer.Find(_TITLE_STR, temp + 1);
	nextArtist  = buffer.Find(_ARTIST_STR, temp + 1);
	nextComment = buffer.Find(_COMMENT_STR, temp + 1);

	// Now determine which one is the closest to our field - that one
	// will mark the end of the required field
	nextField = nextName;

	if (nextField == -1)
		nextField = nextAuthor;
	else if ((nextAuthor != -1) && (nextAuthor < nextField))
		nextField = nextAuthor;

	if (nextField == -1)
		nextField = nextTitle;
	else if ((nextTitle != -1) && (nextTitle < nextField))
		nextField = nextTitle;

	if (nextField == -1)
		nextField = nextArtist;
	else if ((nextArtist != -1) && (nextArtist < nextField))
		nextField = nextArtist;

	if (nextField == -1)
		nextField = nextComment;
	else if ((nextComment != -1) && (nextComment < nextField))
		nextField = nextComment;

	if (nextField == -1)
		nextField = buffer.GetLength();

	// Now nextField points to the last+1 char that should be copied to
	// result. Do that
	result += buffer.Mid(temp, nextField - temp);
	return (true);
}