gloox
1.0
|
00001 /* 00002 Copyright (c) 2005-2009 by Jakob Schroeter <js@camaya.net> 00003 This file is part of the gloox library. http://camaya.net/gloox 00004 00005 This software is distributed under a license. The full license 00006 agreement can be found in the file LICENSE in this distribution. 00007 This software may not be copied, modified, sold or distributed 00008 other than expressed in the named license agreement. 00009 00010 This software is distributed without any warranty. 00011 */ 00012 00013 #include "jid.h" 00014 #include "prep.h" 00015 #include "gloox.h" 00016 #include "util.h" 00017 00018 namespace gloox 00019 { 00020 00021 bool JID::setJID( const std::string& jid ) 00022 { 00023 if ( jid.empty() ) 00024 { 00025 m_bare = m_full = m_server = m_username = m_serverRaw = m_resource = EmptyString; 00026 m_valid = false; 00027 return false; 00028 } 00029 00030 const std::string::size_type at = jid.find( '@' ); 00031 const std::string::size_type slash = jid.find( '/', at == std::string::npos ? 0 : at ); 00032 00033 if( at != std::string::npos && !( m_valid = prep::nodeprep( jid.substr( 0, at ), m_username ) ) ) 00034 return false; 00035 00036 m_serverRaw = jid.substr( at == std::string::npos ? 0 : at + 1, slash - at - 1 ); 00037 if( !( m_valid = prep::nameprep( m_serverRaw, m_server ) ) ) 00038 return false; 00039 00040 if( slash != std::string::npos 00041 && !( m_valid = prep::resourceprep( jid.substr( slash + 1 ), m_resource ) ) ) 00042 return false; 00043 00044 setStrings(); 00045 00046 return m_valid; 00047 } 00048 00049 bool JID::setUsername( const std::string& uname ) 00050 { 00051 m_valid = prep::nodeprep( uname, m_username ); 00052 setStrings(); 00053 return m_valid; 00054 } 00055 00056 bool JID::setServer( const std::string& serv ) 00057 { 00058 m_serverRaw = serv; 00059 m_valid = prep::nameprep( m_serverRaw, m_server ); 00060 setStrings(); 00061 return m_valid; 00062 } 00063 00064 bool JID::setResource( const std::string& res ) 00065 { 00066 m_valid = prep::resourceprep( res, m_resource ); 00067 setFull(); 00068 return m_valid; 00069 } 00070 00071 void JID::setFull() 00072 { 00073 m_full = bare(); 00074 if( !m_resource.empty() ) 00075 m_full += '/' + m_resource; 00076 } 00077 00078 void JID::setBare() 00079 { 00080 if( !m_username.empty() ) 00081 m_bare = m_username + '@'; 00082 else 00083 m_bare = EmptyString; 00084 m_bare += m_server; 00085 } 00086 00087 std::string JID::escapeNode( const std::string& node ) 00088 { 00089 std::string escaped = node; 00090 00091 util::replaceAll( escaped, "\\", "\\5c" ); 00092 util::replaceAll( escaped, " ", "\\20" ); 00093 util::replaceAll( escaped, "\"", "\\22" ); 00094 util::replaceAll( escaped, "&", "\\26" ); 00095 util::replaceAll( escaped, "'", "\\27" ); 00096 util::replaceAll( escaped, "/", "\\2f" ); 00097 util::replaceAll( escaped, ":", "\\3a" ); 00098 util::replaceAll( escaped, "<", "\\3c" ); 00099 util::replaceAll( escaped, ">", "\\3e" ); 00100 util::replaceAll( escaped, "@", "\\40" ); 00101 00102 return escaped; 00103 } 00104 00105 std::string JID::unescapeNode( const std::string& node ) 00106 { 00107 std::string unescaped = node; 00108 00109 util::replaceAll( unescaped, "\\20", " " ); 00110 util::replaceAll( unescaped, "\\22", "\"" ); 00111 util::replaceAll( unescaped, "\\26", "&" ); 00112 util::replaceAll( unescaped, "\\27", "'" ); 00113 util::replaceAll( unescaped, "\\2f", "/" ); 00114 util::replaceAll( unescaped, "\\3a", ":" ); 00115 util::replaceAll( unescaped, "\\3c", "<" ); 00116 util::replaceAll( unescaped, "\\3e", ">" ); 00117 util::replaceAll( unescaped, "\\40", "@" ); 00118 util::replaceAll( unescaped, "\\5c", "\\" ); 00119 00120 return unescaped; 00121 } 00122 00123 }