/*************************************************************************** * $Id: tork.cpp,v 1.160 2007/12/30 12:58:22 hoganrobert Exp $ * Copyright (C) 2006 by Robert Hogan * * robert@roberthogan.net * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ #include #include #include #include #ifdef HAVE_SYS_SELECT_H #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "app.h" using namespace TDEIO; extern "C" { int kdemain(int argc, char **argv) { TDEInstance instance( "tdeio_app" ); kdDebug(7101) << "*** Starting tdeio_app " << endl; if (argc != 4) { kdDebug(7101) << "Usage: tdeio_app protocol domain-socket1 domain-socket2" << endl; exit(-1); } tdeio_appProtocol slave(argv[2], argv[3]); slave.dispatchLoop(); kdDebug(7101) << "*** tdeio_app Done" << endl; return 0; } } tdeio_appProtocol::tdeio_appProtocol(const TQCString &pool_socket, const TQCString &app_socket) : SlaveBase("tdeio_app", pool_socket, app_socket) { kdDebug() << "tdeio_appProtocol::tdeio_appProtocol()" << endl; } tdeio_appProtocol::~tdeio_appProtocol() { kdDebug() << "tdeio_appProtocol::~tdeio_appProtocol()" << endl; } void tdeio_appProtocol::stat(const KURL &url) { kdDebug() << "tdeio_appProtocol::stat: " << url << endl; TQString path = url.path(); if ( path.isEmpty() || path == "/" ) { kdDebug() << "tdeio_appProtocol::stat: " << "creating top level entry" << endl; // The root is "virtual" - it's not a single physical directory TDEIO::UDSEntry entry; m_impl.createTopLevelEntry( entry ); statEntry( entry ); finished(); return; } TQString name; bool ok = m_impl.parseURL(url, name, path); if ( !ok ) { kdDebug() << "tdeio_appProtocol::stat: " << "can't parse url" << endl; error(TDEIO::ERR_MALFORMED_URL, url.prettyURL()); return; } if( path.isEmpty() ) { kdDebug() << "tdeio_appProtocol::stat4: " << "url empty after parsing" << endl; TDEIO::UDSEntry entry; if ( m_impl.statByName(name, entry) ) { statEntry(entry); finished(); } else { error(TDEIO::ERR_DOES_NOT_EXIST, url.prettyURL()); } } else { kdDebug() << "tdeio_appProtocol::stat4: " << "url not empty after parsing: statting" << endl; SlaveBase::stat(url); } } void tdeio_appProtocol::listDir(const KURL &url) { kdDebug() << "tdeio_appProtocol::listDir: " << url << endl; if ( url.path().length() <= 1 ) { kdDebug() << "tdeio_appProtocol::listDir: " << "url empty: listing root" << endl; listRoot(); return; } TQString name, path; bool ok = m_impl.parseURL(url, name, path); if ( !ok ) { error(TDEIO::ERR_MALFORMED_URL, url.prettyURL()); return; } kdDebug() << "tdeio_appProtocol::listDir: " << "url is " << url << ": doing a listDir" << endl; kdDebug() << "tdeio_appProtocol::listDir: " << "name is " << name << ": doing a listDir" << endl; kdDebug() << "tdeio_appProtocol::listDir: " << "path is " << path << ": doing a listDir" << endl; // We've been given something like app:/appname listAppContents(name); } void tdeio_appProtocol::listRoot() { TDEIO::UDSEntry entry; TDEIO::UDSEntryList system_entries; bool ok = m_impl.listRoot(system_entries); if (!ok) { error( m_impl.lastErrorCode(), m_impl.lastErrorMessage() ); return; } totalSize(system_entries.count()+1); m_impl.createTopLevelEntry(entry); listEntry(entry, false); TDEIO::UDSEntryListIterator it = system_entries.begin(); TDEIO::UDSEntryListIterator end = system_entries.end(); for(; it!=end; ++it) { listEntry(*it, false); } entry.clear(); listEntry(entry, true); finished(); } void tdeio_appProtocol::listAppContents(const TQString &name) { TDEIO::UDSEntry entry; TDEIO::UDSEntryList app_entries; bool ok = m_impl.listAppContents(name, app_entries); if (!ok) { error( m_impl.lastErrorCode(), m_impl.lastErrorMessage() ); return; } totalSize(app_entries.count()+1); m_impl.createTopLevelEntry(entry); listEntry(entry, false); TDEIO::UDSEntryListIterator it = app_entries.begin(); TDEIO::UDSEntryListIterator end = app_entries.end(); for(; it!=end; ++it) { listEntry(*it, false); } entry.clear(); listEntry(entry, true); finished(); }