TQString KProtocolInfo::defaultMimetype( const KURL &url ) { KProtocolInfo::Ptr prot = findProtocol(url); if ( !prot ) return TQString::null; return prot->m_defaultMimetype; }
KProtocolInfo::Type KProtocolInfo::outputType( const KURL &url ) { KProtocolInfo::Ptr prot = findProtocol(url); if ( !prot ) return T_NONE; return prot->m_outputType; }
bool KProtocolInfo::canDeleteRecursive( const KURL &url ) { KProtocolInfo::Ptr prot = findProtocol(url); if ( !prot ) return false; return prot->canDeleteRecursive(); }
KProtocolInfo::FileNameUsedForCopying KProtocolInfo::fileNameUsedForCopying( const KURL &url ) { KProtocolInfo::Ptr prot = findProtocol(url); if ( !prot ) return FromURL; return prot->fileNameUsedForCopying(); }
bool KProtocolInfo::canRenameToFile( const KURL &url ) { KProtocolInfo::Ptr prot = findProtocol(url); if ( !prot ) return false; return prot->canRenameToFile(); }
bool KProtocolInfo::canCopyToFile( const KURL &url ) { KProtocolInfo::Ptr prot = findProtocol(url); if ( !prot ) return false; return prot->m_canCopyToFile; }
bool KProtocolInfo::supportsMoving( const KURL &url ) { KProtocolInfo::Ptr prot = findProtocol(url); if ( !prot ) return false; return prot->m_supportsMoving; }
TQStringList KProtocolInfo::listing( const KURL &url ) { KProtocolInfo::Ptr prot = findProtocol(url); if ( !prot ) return TQStringList(); return prot->m_listing; }
/* * SOCKDGRAM is unreliable, so we must repeat messages if we have * not received an acknowledgement within a reasonable amount * of time */ void TalkConnection::ctl_transact(int type, int id_num) { if (protocol == noProtocol) /** We've been so far, but we still don't know which protocol to use. * Let's check it, the way ktalk does. */ findProtocol(); fd_set read_mask, ctl_mask; int nready=0, cc, size, ok=0; struct timeval wait; struct sockaddr_in daemon_addr; char * msg; if (protocol == talkProtocol) { old_msg.type = type; old_msg.id_num = htonl(id_num); msg = (char *)&old_msg; size = sizeof old_msg; } else { new_msg.type = type; new_msg.id_num = htonl(id_num); msg = (char *)&new_msg; size = sizeof new_msg; print_request("ctl_transact: ",&new_msg); } daemon_addr.sin_family = AF_INET; daemon_addr.sin_addr = his_machine_addr; daemon_addr.sin_port = (protocol == talkProtocol) ? talkDaemonPort : ntalkDaemonPort; FD_ZERO(&ctl_mask); FD_SET(ctl_sockt, &ctl_mask); /* Keep sending the message until a response of * the proper type is obtained. */ do { /* resend message until a response is obtained */ do { cc = sendto(ctl_sockt, msg, size, 0, (struct sockaddr *)&daemon_addr, sizeof (daemon_addr)); if (cc != size) { if (errno == EINTR) continue; p_error("Error on write to talk daemon"); } read_mask = ctl_mask; wait.tv_sec = CTL_WAIT; wait.tv_usec = 0; nready = ::select(ctl_sockt+1, &read_mask, 0, 0, &wait); if (nready < 0) { if (errno == EINTR) continue; p_error("Error waiting for daemon response"); } if (nready == 0) ktalk_debug("select returned 0 ! "); } while (nready == 0); /* * Keep reading while there are queued messages * (this is not necessary, it just saves extra * request/acknowledgements being sent) */ do { if (protocol == talkProtocol) cc = ::recv(ctl_sockt, (char *)&old_resp, sizeof (old_resp), 0); else cc = ::recv(ctl_sockt, (char *)&new_resp, sizeof (new_resp), 0); if (cc < 0) { if (errno == EINTR) continue; p_error("Error on read from talk daemon"); } read_mask = ctl_mask; /* an immediate poll */ timerclear(&wait); nready = ::select(ctl_sockt+1, &read_mask, 0, 0, &wait); if (protocol == talkProtocol) ok = (old_resp.type == type); else ok = ((new_resp.type == type) && (new_resp.vers == TALK_VERSION)); } while (nready > 0 && (!ok)); } while (!ok); if (protocol == talkProtocol) { old_resp.id_num = ntohl(old_resp.id_num); old_resp.addr.ta_family = ntohs(old_resp.addr.ta_family); } else { new_resp.id_num = ntohl(new_resp.id_num); new_resp.addr.ta_family = ntohs(new_resp.addr.ta_family); } }