今年六月份的WWDC 2015上,Apple提出了App Transport Security(ATS)概念,
主要是在APP與Server之前提供一種安全的通訊方式,以防竊聽、篡改傳輸數據。

viaLondon 發表在 痞客邦 留言(0) 人氣()

下載https://github.com/swisspol/GCDWebServer/
記得要include libz.dylib, 不然會有linking error

viaLondon 發表在 痞客邦 留言(0) 人氣()

下載 https://github.com/fkuehne/upnpx
How to build: https://code.google.com/p/upnpx/wiki/tutorial
(如果是iOS7.0以上, 需要自己include libstdc++.6.0.9.dylib, 不然會有linking error)

Undefined symbols for architecture x86_64:"std::string::find(char const*, unsigned long) const", referenced from:SSDPSearchResp::Process(sockaddr*, std::vector<SSDP_HTTP_HEADER*, std::allocator<SSDP_HTTP_HEADER*>>) in libupnpx.a(ssdpsearchresp.o)SSDPNotifyAlive::Process(sockaddr*, std::vector<SSDP_HTTP_HEADER*, std::allocator<SSDP_HTTP_HEADER*>>) in libupnpx.a(ssdpnotifyalive.o)"std::string::c_str() const", referenced from:BasicHTTPObserver_wrapper::CanProcessMethod(std::string*) in libupnpx.a(BasicHTTPServer_ObjC.o)BasicHTTPObserver_wrapper::Request(char*,unsignedshort, std::string*, std::string*, std::string*, std::map<std::string, std::string, std::less<std::string>, std::allocator<std::pair<std::string const, std::string>>>*,char*,int) in libupnpx.a(BasicHTTPServer_ObjC.o)-[SSDPDBDevice_ObjC initWithCPPDevice:] in libupnpx.a(SSDPDB_ObjC.o)
  SSDP::Search() in libupnpx.a(ssdp.o)
  SSDPDB::DeleteDevice(unsignedchar*,unsignedint) in libupnpx.a(ssdpdb.o)
  SSDPDB::DeleteDevicesByUuid(unsignedchar*,unsignedint) in libupnpx.a(ssdpdb.o)
  SSDPDB::GetDevice(unsignedchar*,unsignedint) in libupnpx.a(ssdpdb.o)..."std::string::length() const", referenced from:
  SSDPDB::DeleteDevice(unsignedchar*,unsignedint) in libupnpx.a(ssdpdb.o)
  SSDPDB::DeleteDevicesByUuid(unsignedchar*,unsignedint) in libupnpx.a(ssdpdb.o)
  SSDPDB::GetDevice(unsignedchar*,unsignedint) in libupnpx.a(ssdpdb.o)
  SSDPDB::UpdateCacheControl(unsignedchar*,unsignedint,int) in libupnpx.a(ssdpdb.o)"std::string::compare(std::string const&) const", referenced from:bool std::operator<<char, std::char_traits<char>, std::allocator<char>>(std::basic_string<char, std::char_traits<char>, std::allocator<char>>const&, std::basic_string<char, std::char_traits<char>, std::allocator<char>>const&) in libupnpx.a(httpsession.o)bool std::operator<<char, std::char_traits<char>, std::allocator<char>>(std::basic_string<char, std::char_traits<char>, std::allocator<char>>const&, std::basic_string<char, std::char_traits<char>, std::allocator<char>>const&) in libupnpx.a(BasicHTTPServer_ObjC.o)bool std::operator<<char, std::char_traits<char>, std::allocator<char>>(std::basic_string<char, std::char_traits<char>, std::allocator<char>>const&, std::basic_string<char, std::char_traits<char>, std::allocator<char>>const&) in libupnpx.a(basichttpserver.o)"std::allocator<char>::allocator()", referenced from:
  SSDP::SSDP() in libupnpx.a(ssdp.o)BasicHTTPServer::DataReceived(sockaddr_in*,int,unsignedchar*) in libupnpx.a(basichttpserver.o)"std::allocator<char>::~allocator()", referenced from:
  SSDP::SSDP() in libupnpx.a(ssdp.o)BasicHTTPServer::DataReceived(sockaddr_in*,int,unsignedchar*) in libupnpx.a(basichttpserver.o)"std::string::assign(char const*, unsigned long)", referenced from:SSDPSearchResp::Process(sockaddr*, std::vector<SSDP_HTTP_HEADER*, std::allocator<SSDP_HTTP_HEADER*>>) in libupnpx.a(ssdpsearchresp.o)
  SSDPDB::InsertDevice(unsignedchar*,unsignedint) in libupnpx.a(ssdpdb.o)SSDPNotifyAlive::Process(sockaddr*, std::vector<SSDP_HTTP_HEADER*, std::allocator<SSDP_HTTP_HEADER*>>) in libupnpx.a(ssdpnotifyalive.o)"std::string::replace(unsigned long, unsigned long, char const*)", referenced from:SSDPSearchResp::Process(sockaddr*, std::vector<SSDP_HTTP_HEADER*, std::allocator<SSDP_HTTP_HEADER*>>) in libupnpx.a(ssdpsearchresp.o)SSDPNotifyAlive::Process(sockaddr*, std::vector<SSDP_HTTP_HEADER*, std::allocator<SSDP_HTTP_HEADER*>>) in libupnpx.a(ssdpnotifyalive.o)"std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)", referenced from:
  SSDP::SSDP() in libupnpx.a(ssdp.o)BasicHTTPServer::DataReceived(sockaddr_in*,int,unsignedchar*) in libupnpx.a(basichttpserver.o)"std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::string const&)", referenced from:
  std::pair<std::string const, std::string>::pair(std::string const&, std::string const&) in libupnpx.a(httpsession.o)
  std::pair<std::string const, std::string>::pair(std::pair<std::string const, std::string>const&) in libupnpx.a(httpsession.o)
  std::pair<std::string const, std::string>::pair(std::string const&, std::string const&) in libupnpx.a(BasicHTTPServer_ObjC.o)
  std::pair<std::string const, std::string>::pair(std::pair<std::string const, std::string>const&) in libupnpx.a(BasicHTTPServer_ObjC.o)
  std::pair<std::string const,HTTPSession*>::pair(std::string const&,HTTPSession*const&) in libupnpx.a(basichttpserver.o)
  std::pair<std::string const,HTTPSession*>::pair(std::pair<std::string const,HTTPSession*>const&) in libupnpx.a(basichttpserver.o)"std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string()", referenced from:HTTPSession::HTTPSession(char*,unsignedshort) in libupnpx.a(httpsession.o)HTTPSession::ParseHeader(unsignedchar*,int) in libupnpx.a(httpsession.o)
  std::map<std::string, std::string, std::less<std::string>, std::allocator<std::pair<std::string const, std::string>>>::operator[](std::string const&) in libupnpx.a(httpsession.o)BasicHTTPObserver_wrapper::Response(int*, std::map<std::string, std::string, std::less<std::string>, std::allocator<std::pair<std::string const, std::string>>>*,char**,int*) in libupnpx.a(BasicHTTPServer_ObjC.o)
  std::map<std::string, std::string, std::less<std::string>, std::allocator<std::pair<std::string const, std::string>>>::operator[](std::string const&) in libupnpx.a(BasicHTTPServer_ObjC.o)
  ___cxx_global_var_init in libupnpx.a(ssdp.o)
  ___cxx_global_var_init9 in libupnpx.a(ssdp.o)..."std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()", referenced from:HTTPSession::HTTPSession(char*,unsignedshort) in libupnpx.a(httpsession.o)HTTPSession::~HTTPSession() in libupnpx.a(httpsession.o)HTTPSession::ParseHeader(unsignedchar*,int) in libupnpx.a(httpsession.o)
  std::map<std::string, std::string, std::less<std::string>, std::allocator<std::pair<std::string const, std::string>>>::operator[](std::string const&) in libupnpx.a(httpsession.o)
  std::pair<std::string const, std::string>::~pair() in libupnpx.a(httpsession.o)
  std::pair<std::string const, std::string>::pair(std::string const&, std::string const&) in libupnpx.a(httpsession.o)
  std::pair<std::string const, std::string>::pair(std::pair<std::string const, std::string>const&) in libupnpx.a(httpsession.o)..."std::string::operator=(char const*)", referenced from:HTTPSession::ParseHeader(unsignedchar*,int) in libupnpx.a(httpsession.o)BasicHTTPObserver_wrapper::Response(int*, std::map<std::string, std::string, std::less<std::string>, std::allocator<std::pair<std::string const, std::string>>>*,char**,int*) in libupnpx.a(BasicHTTPServer_ObjC.o)
  SSDP::SetOS(charconst*) in libupnpx.a(ssdp.o)
  SSDP::SetProduct(charconst*) in libupnpx.a(ssdp.o)SSDPDBDevice::SSDPDBDevice() in libupnpx.a(ssdpdbdevice.o)"std::string::operator=(std::string const&)", referenced from:HTTPSession::ParseHeader(unsignedchar*,int) in libupnpx.a(httpsession.o)BasicHTTPObserver_wrapper::Response(int*, std::map<std::string, std::string, std::less<std::string>, std::allocator<std::pair<std::string const, std::string>>>*,char**,int*) in libupnpx.a(BasicHTTPServer_ObjC.o)"std::_Rb_tree_decrement(std::_Rb_tree_node_base*)", referenced from:
  std::_Rb_tree_iterator<std::pair<std::string const, std::string>>::operator--() in libupnpx.a(httpsession.o)
  std::_Rb_tree_iterator<std::pair<std::string const, std::string>>::operator--() in libupnpx.a(BasicHTTPServer_ObjC.o)
  std::_Rb_tree_iterator<std::pair<std::string const,HTTPSession*>>::operator--() in libupnpx.a(basichttpserver.o)"std::_Rb_tree_increment(std::_Rb_tree_node_base const*)", referenced from:
  std::_Rb_tree_const_iterator<std::pair<std::string const, std::string>>::operator++(int) in libupnpx.a(BasicHTTPServer_ObjC.o)"std::_Rb_tree_increment(std::_Rb_tree_node_base*)", referenced from:
  std::_Rb_tree_iterator<std::pair<std::string const, std::string>>::operator++() in libupnpx.a(httpsession.o)
  std::_Rb_tree_iterator<std::pair<std::string const, std::string>>::operator++() in libupnpx.a(BasicHTTPServer_ObjC.o)
  std::_Rb_tree_iterator<std::pair<std::string const,HTTPSession*>>::operator++(int) in libupnpx.a(basichttpserver.o)
  std::_Rb_tree_iterator<std::pair<std::string const,HTTPSession*>>::operator++() in libupnpx.a(basichttpserver.o)"std::__throw_length_error(char const*)", referenced from:
  std::vector<SSDPObserver*, std::allocator<SSDPObserver*>>::_M_insert_aux(__gnu_cxx::__normal_iterator<SSDPObserver**, std::vector<SSDPObserver*, std::allocator<SSDPObserver*>>>,SSDPObserver*const&) in libupnpx.a(ssdp.o)
  std::vector<SSDP_HTTP_HEADER*, std::allocator<SSDP_HTTP_HEADER*>>::_M_insert_aux(__gnu_cxx::__normal_iterator<SSDP_HTTP_HEADER**, std::vector<SSDP_HTTP_HEADER*, std::allocator<SSDP_HTTP_HEADER*>>>, SSDP_HTTP_HEADER*const&) in libupnpx.a(ssdpmessage.o)
  std::vector<BasicHTTPObserver*, std::allocator<BasicHTTPObserver*>>::_M_insert_aux(__gnu_cxx::__normal_iterator<BasicHTTPObserver**, std::vector<BasicHTTPObserver*, std::allocator<BasicHTTPObserver*>>>,BasicHTTPObserver*const&) in libupnpx.a(basichttpserver.o)
  std::vector<SocketServerConnection*, std::allocator<SocketServerConnection*>>::_M_insert_aux(__gnu_cxx::__normal_iterator<SocketServerConnection**, std::vector<SocketServerConnection*, std::allocator<SocketServerConnection*>>>,SocketServerConnection*const&) in libupnpx.a(socketserver.o)
  std::vector<SocketServerObserver*, std::allocator<SocketServerObserver*>>::_M_insert_aux(__gnu_cxx::__normal_iterator<SocketServerObserver**, std::vector<SocketServerObserver*, std::allocator<SocketServerObserver*>>>,SocketServerObserver*const&) in libupnpx.a(socketserver.o)
  std::vector<SSDPDBObserver*, std::allocator<SSDPDBObserver*>>::_M_insert_aux(__gnu_cxx::__normal_iterator<SSDPDBObserver**, std::vector<SSDPDBObserver*, std::allocator<SSDPDBObserver*>>>,SSDPDBObserver*const&) in libupnpx.a(ssdpdb.o)
  std::vector<SSDPDBDevice*, std::allocator<SSDPDBDevice*>>::_M_insert_aux(__gnu_cxx::__normal_iterator<SSDPDBDevice**, std::vector<SSDPDBDevice*, std::allocator<SSDPDBDevice*>>>,SSDPDBDevice*const&) in libupnpx.a(ssdpdb.o)..."std::_Rb_tree_rebalance_for_erase(std::_Rb_tree_node_base*, std::_Rb_tree_node_base&)", referenced from:
  std::_Rb_tree<std::string, std::pair<std::string const,HTTPSession*>, std::_Select1st<std::pair<std::string const,HTTPSession*>>, std::less<std::string>, std::allocator<std::pair<std::string const,HTTPSession*>>>::erase(std::_Rb_tree_iterator<std::pair<std::string const,HTTPSession*>>) in libupnpx.a(basichttpserver.o)"std::_Rb_tree_insert_and_rebalance(bool, std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::_Rb_tree_node_base&)", referenced from:
  std::_Rb_tree<std::string, std::pair<std::string const, std::string>, std::_Select1st<std::pair<std::string const, std::string>>, std::less<std::string>, std::allocator<std::pair<std::string const, std::string>>>::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<std::string const, std::string>const&) in libupnpx.a(httpsession.o)
  std::_Rb_tree<std::string, std::pair<std::string const, std::string>, std::_Select1st<std::pair<std::string const, std::string>>, std::less<std::string>, std::allocator<std::pair<std::string const, std::string>>>::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<std::string const, std::string>const&) in libupnpx.a(BasicHTTPServer_ObjC.o)
  std::_Rb_tree<std::string, std::pair<std::string const,HTTPSession*>, std::_Select1st<std::pair<std::string const,HTTPSession*>>, std::less<std::string>, std::allocator<std::pair<std::string const,HTTPSession*>>>::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<std::string const,HTTPSession*>const&) in libupnpx.a(basichttpserver.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1(use -v to see invocation)

 

viaLondon 發表在 痞客邦 留言(0) 人氣()

雖然只有1.0的引擊,但是比2.0以上的車還會跑
 

viaLondon 發表在 痞客邦 留言(0) 人氣()

呼~ 終於回國了。這次回國比以前更感觸良多~

 

viaLondon 發表在 痞客邦 留言(0) 人氣()

Reference: http://shinyang.tistory.com/275

viaLondon 發表在 痞客邦 留言(0) 人氣()

自從定居北投,幾乎每天晚上回家吃完飯就帶我家嚕嚕出門散步,

漸漸地,嚕嚕愛上散步 (散步完就賞她小肉塊)

viaLondon 發表在 痞客邦 留言(0) 人氣()

從去年底開始準備結婚、蜜月、北投裝修的事情,就一直有貴人相助,
也累積了不少推薦文....XDD

viaLondon 發表在 痞客邦 留言(0) 人氣()