diff --git a/Makefile b/Makefile index a4087f4..5c7591d 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,7 @@ all:websocket -CXXFLAGS ?= -std=c++11 -g -O3 -L. -L/usr/local/lib -L. -lcrypto -lboost_program_options -lboost_filesystem -lboost_coroutine -lboost_system -lboost_thread -lpthread -lboost_context -lboost_date_time -lboost_log_setup -lboost_log -DBOOST_ASIO_ENABLE_HANDLER_TRACKING +CXXFLAGS ?= -std=c++11 -O2 -finline-limit=1000 -L. -L/usr/local/lib -L. -lcrypto -lboost_program_options -lboost_filesystem -lboost_coroutine -lboost_system -lboost_thread -lpthread -lboost_context -lboost_date_time -lboost_log_setup -lboost_log -lssl + daemon:websocketDaemon websocketDaemon: websocket.cpp base64.cpp modp_base64/modp_b64.cc renesolalog.cpp diff --git a/client_wss.hpp b/client_wss.hpp index 0c57adf..71dece5 100644 --- a/client_wss.hpp +++ b/client_wss.hpp @@ -36,10 +36,10 @@ namespace SimpleWeb { void connect() { boost::asio::ip::tcp::resolver::query query(host, std::to_string(port)); - resolver.async_resolve(query, [this] + asio_resolver.async_resolve(query, [this] (const boost::system::error_code &ec, boost::asio::ip::tcp::resolver::iterator it){ if(!ec) { - connection=std::shared_ptr(new Connection(new WSS(io_service, context))); + connection=std::unique_ptr(new Connection(new WSS(asio_io_service, context))); boost::asio::async_connect(connection->socket->lowest_layer(), it, [this] (const boost::system::error_code &ec, boost::asio::ip::tcp::resolver::iterator it){ diff --git a/config.ini b/config.ini index 70e5397..24df5a1 100644 --- a/config.ini +++ b/config.ini @@ -8,8 +8,8 @@ delete_url=delete list_url=list startLevel=0 buildVersion=Apollo-1.0-2015.06-01-1 -server_crt=server.crt -server_key=server.key +server_crt=crm-test_renesola_com.crt +server_key=crm-test_renesola_com.key [nfs] path=/opt/renesola/apollo/rootnfs diff --git a/crm-test_renesola_com.crt b/crm-test_renesola_com.crt new file mode 100644 index 0000000..3b0fe0a --- /dev/null +++ b/crm-test_renesola_com.crt @@ -0,0 +1,98 @@ +-----BEGIN CERTIFICATE----- +MIIFNDCCBBygAwIBAgIQP/I0jJzEtW2lpZS21AfGUDANBgkqhkiG9w0BAQsFADBw +MQswCQYDVQQGEwJDTjERMA8GA1UECBMIU2hhbmdoYWkxJTAjBgNVBAoTHFRydXN0 +QXNpYSBUZWNobm9sb2dpZXMsIEluYy4xJzAlBgNVBAMTHlRydXN0QXNpYSBSU0Eg +RFYgU1NMIFNlcnZlciBDQTAeFw0xNjA0MjIwMDAwMDBaFw0xNjA1MjIyMzU5NTla +MGAxITAfBgNVBAsTGERvbWFpbiBDb250cm9sIFZhbGlkYXRlZDEbMBkGA1UECxMS +VHJ1c3RBc2lhIEZyZWUgU1NMMR4wHAYDVQQDExVjcm0tdGVzdC5yZW5lc29sYS5j +b20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDMKdr6y49pjdYYxnm8 +NFbMQHUnj7olIKfLQfBDzMaSh8pZZV8PE5g9rYBRiaH8pLJtpFLrRWaw5EN6RShK +jeO7W+l62PYSlKQwW2CwORmpVcL1ZEcA8AjrbHLSZ/AsPqFgo6yvMyoDEX9vxsYP +tfDyCRFzI4JCzE6AstoZpycEmcGjQfcOPLMia76Xz+EB/Bg1v3R5tRsLuACfHwOj +99er+iZ4IHyS0Z5FYSvN90GyvL/ICrk+ZasllaNS+i2+AQBRvFXCKgeBZpXuX6Hi +t43dXvhsGwpvgMJirXR1tqu9Jctu8HVeMZyNZpClooHwGVNEamrZLctwWX0/sS8S +/UZhAgMBAAGjggHYMIIB1DAfBgNVHSMEGDAWgBR7FhLOvGeCvXj0NqvcT2sXSgXt +pTAdBgNVHQ4EFgQUDoKa3fCj6Vkb7gs60IMWpDm7XpQwDgYDVR0PAQH/BAQDAgWg +MAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMEsG +A1UdIAREMEIwNgYLKwYBBAGyMQECAjEwJzAlBggrBgEFBQcCARYZaHR0cHM6Ly9j +cHMudXNlcnRydXN0LmNvbTAIBgZngQwBAgEwSgYDVR0fBEMwQTA/oD2gO4Y5aHR0 +cDovL2NybC50cnVzdGFzaWFzc2wuY29tL1RydXN0QXNpYVJTQURWU1NMU2VydmVy +Q0EuY3JsMH8GCCsGAQUFBwEBBHMwcTBFBggrBgEFBQcwAoY5aHR0cDovL2NydC50 +cnVzdGFzaWFzc2wuY29tL1RydXN0QXNpYVJTQURWU1NMU2VydmVyQ0EuY3J0MCgG +CCsGAQUFBzABhhxodHRwOi8vb2NzcC50cnVzdGFzaWFzc2wuY29tMDsGA1UdEQQ0 +MDKCFWNybS10ZXN0LnJlbmVzb2xhLmNvbYIZd3d3LmNybS10ZXN0LnJlbmVzb2xh +LmNvbTANBgkqhkiG9w0BAQsFAAOCAQEAZltOlxkZYIOG/+DabYYMsVoRccU0d3mp +XcQVFq4ZoakW4R/HA2iPoycvFZlgs/yyGcUIc67F+zUvXisw0uAaSuyL9KnNorO+ +KnImlB5m7ANbhoFD733/BGtVlx5r7SyO1BG3jZLH3tUvZ/Uu01aq3nhr0KT6HHLr +eeXlO0YKgBpCKkELSrXSXHq5ck3uoQdOvEMPojxQsuqTUBeomTVZcNDkB98p7Rns +Wb7PbBZh58GoqAXevfT7tuw8zxXNMgbEUsrcoFPEvAry78JzrB+R8bx1AgTm6i7c +76bZVpgyq77KfWoS5L+VSpcMtelychoP8WEnFqZFcKjZd2VfgU7v6w== +-----END CERTIFICATE----- + +-----BEGIN CERTIFICATE----- +MIIF+jCCA+KgAwIBAgIQAdFs++0ey5zfaqIxz4xU+TANBgkqhkiG9w0BAQwFADCB +iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl +cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV +BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTUw +MzExMDAwMDAwWhcNMjUwMzEwMjM1OTU5WjBwMQswCQYDVQQGEwJDTjERMA8GA1UE +CBMIU2hhbmdoYWkxJTAjBgNVBAoTHFRydXN0QXNpYSBUZWNobm9sb2dpZXMsIElu +Yy4xJzAlBgNVBAMTHlRydXN0QXNpYSBSU0EgRFYgU1NMIFNlcnZlciBDQTCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKVXxe36oseRAbs4z+/mLAWrYUom +QDA0DwiDfYyqf8nrTG/wxELxtboEGBF4U5NbEye/i5t9in+mdbzdwpN657myfypS +l2sC2YyY7ArmRxgTFyrtxhdzBLVnJEly2EAxk06QBwzcEfMJ5dWKpqcDY85K4N/C +hO4E2BjzZRG7F3kZlo0T2oDbymNUt3J//cFwSiKl4LuSIUmvkUexbEG+75kvMZ5U +5P3/C/becM61izwn+ftHFS7j9Rn7Hut4yqn+ePUOcBFZ6U02lcRDAPElq3SzyOvW +mJxUTRiYHrnSK4qFHCBnNmfSlQvKUAo30Az4UiDcro+9YWtriR90DKbZrFECAwEA +AaOCAXUwggFxMB8GA1UdIwQYMBaAFFN5v1qqK0rPVIDh2JvAnfKyA2bLMB0GA1Ud +DgQWBBR7FhLOvGeCvXj0NqvcT2sXSgXtpTAOBgNVHQ8BAf8EBAMCAYYwEgYDVR0T +AQH/BAgwBgEB/wIBADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwIgYD +VR0gBBswGTANBgsrBgEEAbIxAQICMTAIBgZngQwBAgEwUAYDVR0fBEkwRzBFoEOg +QYY/aHR0cDovL2NybC51c2VydHJ1c3QuY29tL1VTRVJUcnVzdFJTQUNlcnRpZmlj +YXRpb25BdXRob3JpdHkuY3JsMHYGCCsGAQUFBwEBBGowaDA/BggrBgEFBQcwAoYz +aHR0cDovL2NydC51c2VydHJ1c3QuY29tL1VTRVJUcnVzdFJTQUFkZFRydXN0Q0Eu +Y3J0MCUGCCsGAQUFBzABhhlodHRwOi8vb2NzcC51c2VydHJ1c3QuY29tMA0GCSqG +SIb3DQEBDAUAA4ICAQAHygz5l1zWzcKT859aQgyDfUsiLyH+UKJ8jqSzOHb8A7Af +iK/K0HSZrg5tKiU90x2K/SpVuMmXlxNlxs7X1oDRvpgf8FHXZeVqm7fxuaFJ1fRi +Y73w9ClVhuvfYs2ziLyFt99nudgz9o/oroCe6gihR3LJW6jyS5LXcWE+uzv5CgLI +6cHPjQdpgk8AcjqNBtqGiL7WgXRQMKHyb8jeBozKLi9M/VNW44WSaCs0JzXxBglL +6fYOqOgF9lqrVVp257R3W4oqhbbHZ/2NY39hqs91YCBWhdVQvBYqM5b9N+v2+aEn +RRYdyabdHUpMJ+5Jmbf9ydAcCix9eS8QMZbgal3vrwbJR6/MqOvuKcrBXe7j7ZxH +WhL177r+e9SHzUcpCATDUJrL9fjCoBvWifiP9oPCVHkfpEYD9uu7sc+fBfFJP9V5 +mEQd0Vk5neWsNSq8cpfI7Ok4/R920+BD4an1Pkx9tly8P7Vza8aXSyv3OIplRYgr +4Qf+6Cp2hVSSHL1Sv8D9TwvCqVvH7Zb1WwvuX4UHKo/Ae1cUiiEyavWGBo9o7bnV +tyRdxTJmn6f6PeKe1u+HTCBoEuoVF22DJcbwTFiJ2U5voyb+OS6XXvIOIWOP+Imz +3+WHDNM1GuNGDqz25zKCkl03MvK0Yw2FwT/HhSMSs1VmT5iCzaKXS7YgtGETKg== +-----END CERTIFICATE----- + +-----BEGIN CERTIFICATE----- +MIIFdzCCBF+gAwIBAgIQE+oocFv07O0MNmMJgGFDNjANBgkqhkiG9w0BAQwFADBv +MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFk +ZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBF +eHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFow +gYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpOZXcgSmVyc2V5MRQwEgYDVQQHEwtK +ZXJzZXkgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMS4wLAYD +VQQDEyVVU0VSVHJ1c3QgUlNBIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjAN +BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAgBJlFzYOw9sIs9CsVw127c0n00yt +UINh4qogTQktZAnczomfzD2p7PbPwdzx07HWezcoEStH2jnGvDoZtF+mvX2do2NC +tnbyqTsrkfjib9DsFiCQCT7i6HTJGLSR1GJk23+jBvGIGGqQIjy8/hPwhxR79uQf +jtTkUcYRZ0YIUcuGFFQ/vDP+fmyc/xadGL1RjjWmp2bIcmfbIWax1Jt4A8BQOujM +8Ny8nkz+rwWWNR9XWrf/zvk9tyy29lTdyOcSOk2uTIq3XJq0tyA9yn8iNK5+O2hm +AUTnAU5GU5szYPeUvlM3kHND8zLDU+/bqv50TmnHa4xgk97Exwzf4TKuzJM7UXiV +Z4vuPVb+DNBpDxsP8yUmazNt925H+nND5X4OpWaxKXwyhGNVicQNwZNUMBkTrNN9 +N6frXTpsNVzbQdcS2qlJC9/YgIoJk2KOtWbPJYjNhLixP6Q5D9kCnusSTJV882sF +qV4Wg8y4Z+LoE53MW4LTTLPtW//e5XOsIzstAL81VXQJSdhJWBp/kjbmUZIO8yZ9 +HE0XvMnsQybQv0FfQKlERPSZ51eHnlAfV1SoPv10Yy+xUGUJ5lhCLkMaTLTwJUdZ ++gQek9QmRkpQgbLevni3/GcV4clXhB4PY9bpYrrWX1Uu6lzGKAgEJTm4Diup8kyX +HAc/DVL17e8vgg8CAwEAAaOB9DCB8TAfBgNVHSMEGDAWgBStvZh6NLQm9/rEJlTv +A73gJMtUGjAdBgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/ +BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0gBAowCDAGBgRVHSAAMEQGA1Ud +HwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9BZGRUcnVzdEV4 +dGVybmFsQ0FSb290LmNybDA1BggrBgEFBQcBAQQpMCcwJQYIKwYBBQUHMAGGGWh0 +dHA6Ly9vY3NwLnVzZXJ0cnVzdC5jb20wDQYJKoZIhvcNAQEMBQADggEBAJNl9jeD +lQ9ew4IcH9Z35zyKwKoJ8OkLJvHgwmp1ocd5yblSYMgpEg7wrQPWCcR23+WmgZWn +RtqCV6mVksW2jwMibDN3wXsyF24HzloUQToFJBv2FAY7qCUkDrvMKnXduXBBP3zQ +YzYhBx9G/2CkkeFnvN4ffhkUyWNnkepnB2u0j4vAbkN9w6GAbLIevFOFfdyQoaS8 +Le9Gclc1Bb+7RrtubTeZtv8jkpHGbkD4jylW6l/VXxRTrPBPYer3IsynVgviuDQf +Jtl7GQVoP7o81DgGotPmjw7jtHFtQELFhLRAlSv0ZaBIefYdgWOWnU914Ph85I6p +0fKtirOMxyHNwu8= +-----END CERTIFICATE----- diff --git a/crm-test_renesola_com.key b/crm-test_renesola_com.key new file mode 100644 index 0000000..85b07c6 --- /dev/null +++ b/crm-test_renesola_com.key @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDMKdr6y49pjdYY +xnm8NFbMQHUnj7olIKfLQfBDzMaSh8pZZV8PE5g9rYBRiaH8pLJtpFLrRWaw5EN6 +RShKjeO7W+l62PYSlKQwW2CwORmpVcL1ZEcA8AjrbHLSZ/AsPqFgo6yvMyoDEX9v +xsYPtfDyCRFzI4JCzE6AstoZpycEmcGjQfcOPLMia76Xz+EB/Bg1v3R5tRsLuACf +HwOj99er+iZ4IHyS0Z5FYSvN90GyvL/ICrk+ZasllaNS+i2+AQBRvFXCKgeBZpXu +X6Hit43dXvhsGwpvgMJirXR1tqu9Jctu8HVeMZyNZpClooHwGVNEamrZLctwWX0/ +sS8S/UZhAgMBAAECggEBAIyn/Wyxl3EyPaE+BBqMuIvpkI0b8TOpBtD68avURa4o +DVl/hHkfl9BOW0xRlR843JC7GEFsw+30pSR0xuhuTsoC7Z0sIoP0khWarsdZ33sR +Ucq8NkrIFG0VfxnEb+wbjhTFTrA5gKUyheidOlESmRg29SWs/g5FMYRrM+VeinwY +stY4e0eyACBzspz4kFy17EYbVQE0A815VmBLcGL7B74FKlJ3JJMBVEAFM4ySZVmC +bsnTQtQs3XEkLlrImOCqByFrbfkfHplkmqumwDWF/05W4L3azj/ISVeD92er/lRm +zvB7jUkHcIjil9WeY1i5V1JNVi+R3D5/pQmVLTbdLG0CgYEA7bNsvQuoWP45167n ++gYYMcf2b8Ijcl6G3Qc4n4Ht1E0EOBCJTobHFZAeXUgwbSzz6TeCFOMJfRv5hqYT +pJpl/FG3XuqTNorLCQ8K8THcxtCt6JVwk54a47dYvrpgtyKCO3KiId9x3baSWdhD +fprmqt5OI9Z3m9leHsFvPLQQujMCgYEA2+F7DlEt4bX/GA7b4s2/TR2WVbsPvsq5 +uKIrTH4wZOATSD7oGZVqtG0nndNNEItXm/n27yVEAXYGgRJlo5IMoSehrVFiCAsK +aDcb+Dy+98NcvTxeaHJ7O6864lU98Bx9RZzBMAP2yQmURVx6K/8V9OprLSr6kMTq +Argw6PPy0RsCgYBKKDX+bIqi6P1mupyItioKLdZGW4zve2obvsr9iG2IVFbCnvYX +V5j4szOl6oWhKesWkUi193bYX0fjqCBss/apV10b8Zbn5zkcpGLHiMTWCfiXnTe3 +9hVxgZvgNQlDWTLEFSlb4/gEMZdLDFtSPkVEfYJnT9uU9aWVdsebapnlXQKBgAJp +i98RVu6F/6F08EahuTqQW4jfP4H5WWZEKTNyovdIWg3N2uAE+qG2HNwnaE4JKVHl +wSbIguF9OP8Lg5/yxz6xX522Kdwqutd/20ey6ulu9EKDOgntT5rNBllbVA2hUmKE +IL51HK0B9OV56UE4UDZaqAhb01npPyP+f1Le8kgHAoGBAMQlwIw2wnsVaK0/59IP +NfTpmWwym9WvbZdsfJo0ioZ8cWijj9/kGY1x5jE8ZfbtGN2zrougFfvwNPa1Mcz5 +oC69gTDe7aLu/EY18t87Iw9EirhdbOK5M0L/4foz/YByVSLkXgsMevSqIPbZK+Ic +2vAGFzYyZ/gvu7ndHtDSqY6/ +-----END PRIVATE KEY----- diff --git a/readme.txt b/readme.txt index b9f810b..14dc7ff 100644 --- a/readme.txt +++ b/readme.txt @@ -1,17 +1,19 @@ -1、增加异常处理try catch -2、增加日志 -3、定义接口,文件存放目录及是否需要权限问题 -4、ie不兼容需要找人改写 +锘2016.08.24 +1銆佸鍔犲紓甯稿鐞唗ry catch +2銆佸鍔犳棩蹇 +3銆佸畾涔夋帴鍙,鏂囦欢瀛樻斁鐩綍鍙婃槸鍚﹂渶瑕佹潈闄愰棶棰 +4銆乮e涓嶅吋瀹归渶瑕佹壘浜烘敼鍐 -1、增加配置 -nfs挂载目录 -文件名字有重复时是覆盖写还是追加写 + +1銆佸鍔犻厤缃 +nfs鎸傝浇鐩綍 +鏂囦欢鍚嶅瓧鏈夐噸澶嶆椂鏄鐩栧啓杩樻槸杩藉姞鍐 try catch -更改root用户为websocket不可行,设置nfs写文件为nfsnobody用户 +鏇存敼root鐢ㄦ埛涓簑ebsocket涓嶅彲琛岋紝璁剧疆nfs鍐欐枃浠朵负nfsnobody鐢ㄦ埛 -2、日志 +2銆佹棩蹇 client:{"filename":"1332.png","size":302779,"type":"base64","parameters":[]} server: @@ -19,7 +21,7 @@ server: "{\"type\":\"STOR\",\"message\":\"init file failed\",\"code\": 500}"; -client:发送文件内容,当内容发送完时关闭连接 +client:鍙戦佹枃浠跺唴瀹,褰撳唴瀹瑰彂閫佸畬鏃跺叧闂繛鎺 server: "{\"type\":\"DATA\",\"code\": 200,\"bytesRead\":1024}"; @@ -49,4 +51,9 @@ server: ws://172.18.100.72:8080/upload ws://172.18.100.72:8080/rename ws://172.18.100.72:8080/delete -ws://172.18.100.72:8080/list \ No newline at end of file +ws://172.18.100.72:8080/list + +wss://172.18.100.72:8080/upload +wss://172.18.100.72:8080/rename +wss://172.18.100.72:8080/delete +wss://172.18.100.72:8080/list \ No newline at end of file diff --git a/serverResources.hpp b/serverResources.hpp index 2a6cad7..bc9c10b 100644 --- a/serverResources.hpp +++ b/serverResources.hpp @@ -30,15 +30,15 @@ using namespace boost::posix_time; namespace fs = boost::filesystem; typedef SimpleWeb::SocketServer WssServer; typedef SimpleWeb::SocketClient WssClient; -map uploads; -string nfspath = ""; -std::mutex conLock_; -std::mutex directory_is_empty_lock; +map uploadss; +string nfspaths = ""; +std::mutex conLock_s; +std::mutex directory_is_empty_locks; bool create_dirs(std::string dir) { try { - std::unique_lock locker(conLock_); + std::unique_lock locker(conLock_s); return boost::filesystem::create_directories(dir); } catch (std::exception& e) @@ -54,14 +54,14 @@ bool create_dirs(std::string dir) } string uploads_inits(size_t userid, string filename, int size, bool bin = false) { - std::unique_lock locker(conLock_); + std::unique_lock locker(conLock_s); //uploadsinit((size_t)connection.get(),filename,size,true); string retString; ptime now = second_clock::local_time(); string now_str = to_iso_extended_string(now.date()) + " " + to_simple_string(now.time_of_day()); try { - string path = nfspath+ filename; + string path = nfspaths+ filename; fs::path p(path); p.remove_filename(); @@ -74,7 +74,7 @@ string uploads_inits(size_t userid, string filename, int size, bool bin = false) return retString; } } - auto ret = uploads.insert(make_pair(userid, FileUpload(path, size, bin))); + auto ret = uploadss.insert(make_pair(userid, FileUpload(path, size, bin))); if (ret.second) { cout << "map insert succeeded" << endl; @@ -98,16 +98,16 @@ string uploads_inits(size_t userid, string filename, int size, bool bin = false) } string write_datas(size_t userid, string data) { - std::unique_lock locker(conLock_); + std::unique_lock locker(conLock_s); //write_data((size_t)connection.get(),output_str); string retString; ptime now = second_clock::local_time(); string now_str = to_iso_extended_string(now.date()) + " " + to_simple_string(now.time_of_day()); try { - //uploads[userid].addData(data); - auto iter = uploads.find(userid); - if (iter != uploads.end()) + //uploadss[userid].addData(data); + auto iter = uploadss.find(userid); + if (iter != uploadss.end()) { //cout << iter->second << endl; iter->second.addData(data); @@ -134,12 +134,12 @@ string write_datas(size_t userid, string data) } void finish_uploads(size_t userid) { - std::unique_lock locker(conLock_); - auto iter = uploads.find(userid); - if (iter != uploads.end()) + std::unique_lock locker(conLock_s); + auto iter = uploadss.find(userid); + if (iter != uploadss.end()) { iter->second.close(); - uploads.erase(userid); + uploadss.erase(userid); } //cout << "double free" << endl; } @@ -183,9 +183,9 @@ void server_send_datas(WssServer& server, shared_ptr conn } void server_sends(WssServer& server, shared_ptr connection, string retString, string action) { - cout << action << " Server: Sending message \"" << retString << "\" to " << (size_t)connection.get() << endl; + cout << action << "wss Server: Sending message \"" << retString << "\" to " << (size_t)connection.get() << endl; //************************************************ - BOOST_LOG_SEV(server.slg, notification) << action << " Server: Sending message \"" << retString << "\" to " << (size_t)connection.get(); + BOOST_LOG_SEV(server.slg, notification) << action << "wss Server: Sending message \"" << retString << "\" to " << (size_t)connection.get(); server.initsink->flush(); //************************************************ server_send_datas(server, connection, retString, action); @@ -194,18 +194,18 @@ void server_sends(WssServer& server, shared_ptr connectio string rename_files(string data_oldFile, string data_newFile) { - std::unique_lock locker(conLock_); - //uploadsinit((size_t)connection.get(),filename,size,true); + std::unique_lock locker(conLock_s); + //uploadssinit((size_t)connection.get(),filename,size,true); string retString; ptime now = second_clock::local_time(); string now_str = to_iso_extended_string(now.date()) + " " + to_simple_string(now.time_of_day()); try { - /*cout << nfspath + data_oldFile << endl; - cout << nfspath + data_newFile << endl;*/ - fs::path oldpath(nfspath + data_oldFile); - fs::path newpath(nfspath + data_newFile); + /*cout << nfspaths + data_oldFile << endl; + cout << nfspaths + data_newFile << endl;*/ + fs::path oldpath(nfspaths + data_oldFile); + fs::path newpath(nfspaths + data_newFile); fs::rename(oldpath, newpath); cout << "rename success" << endl; @@ -228,7 +228,7 @@ string rename_files(string data_oldFile, string data_newFile) } bool directory_is_emptys(fs::path p) { - std::unique_lock locker(directory_is_empty_lock); + std::unique_lock locker(directory_is_empty_locks); //cout << "directory_is_empty" << endl; try { @@ -300,7 +300,7 @@ bool directory_is_emptys(fs::path p) } bool delete_files(string file,bool delete_empty) { - std::unique_lock locker(conLock_); + std::unique_lock locker(conLock_s); try { @@ -339,7 +339,7 @@ bool delete_files(string file,bool delete_empty) void listfiles(ptree& listfiletree, string path) { - std::unique_lock locker(directory_is_empty_lock); + std::unique_lock locker(directory_is_empty_locks); //cout << "directory_is_empty" << endl; //ptree filetree; try @@ -434,7 +434,7 @@ void serverResourceUploads(WssServer& server, string url) } else { - fs::path p(nfspath+file); + fs::path p(nfspaths+file); if (fs::exists(p)) { retString = "{\"action\":\"UPLOAD_FILE\",\"errorCode\": -9001,\"message\":\"file exist\",\"phase\":\"PREPARE\",\"ts\":\"" + now_str + "\"}"; @@ -502,9 +502,9 @@ void serverResourceUploads(WssServer& server, string url) }; websocket.onopen = [&server](shared_ptr connection) { - cout << "upload Server: Opened connection " << (size_t)connection.get() << endl; + cout << "wss server: Opened connection " << (size_t)connection.get() << endl; //************************************************ - BOOST_LOG_SEV(server.slg, notification) << "upload Server: Opened connection " << (size_t)connection.get(); + BOOST_LOG_SEV(server.slg, notification) << "wss server: Opened connection " << (size_t)connection.get(); server.initsink->flush(); //************************************************ }; @@ -513,18 +513,18 @@ void serverResourceUploads(WssServer& server, string url) websocket.onclose = [&server](shared_ptr connection, int status, const string& reason) { finish_uploads((size_t)connection.get()); - cout << "upload Server: Closed connection " << (size_t)connection.get() << " with status code:" << status <<",reason:"<flush(); //************************************************ }; websocket.onerror = [&server](shared_ptr connection, const boost::system::error_code& ec) { - cout << "upload Server: Error in connection " << (size_t)connection.get() << ". " << + cout << "wss server: Error in connection " << (size_t)connection.get() << ". " << "Error: " << ec << ", error message: " << ec.message() << endl; //************************************************ - BOOST_LOG_SEV(server.slg, error) << "upload Server: Error in connection " << (size_t)connection.get() << ". " << + BOOST_LOG_SEV(server.slg, error) << "wss server: Error in connection " << (size_t)connection.get() << ". " << "Error: " << ec << ", error message: " << ec.message(); server.initsink->flush(); //************************************************ @@ -667,7 +667,7 @@ void serverResourceDeletes(WssServer& server, string url) for (ptree::iterator it = pdata_files.begin(); it != pdata_files.end(); ++it) { string file = it->second.get("file"); - if (delete_files(nfspath + file, pdata_deleteDir)) + if (delete_files(nfspaths + file, pdata_deleteDir)) count++; } @@ -785,7 +785,7 @@ void serverResourceLists(WssServer& server, string url) { ptree listfiletree; string type = it->second.get("type"); - listfiles(listfiletree, nfspath+"/"+storagePath+"/"+type); + listfiles(listfiletree, nfspaths+"/"+storagePath+"/"+type); pinfiles.add_child(type, listfiletree); } datachidren.add_child("files", pinfiles); diff --git a/server_wss.hpp b/server_wss.hpp index 46f3d3d..8ebe3af 100644 --- a/server_wss.hpp +++ b/server_wss.hpp @@ -29,9 +29,9 @@ namespace SimpleWeb { void accept() { //Create new socket for this connection (stored in Connection::socket) //Shared_ptr is used to pass temporary objects to the asynchronous functions - std::shared_ptr connection(new Connection(new WSS(io_service, context))); + std::shared_ptr connection(new Connection(new WSS(asio_io_service, context))); - acceptor.async_accept(connection->socket->lowest_layer(), [this, connection](const boost::system::error_code& ec) { + asio_acceptor.async_accept(connection->socket->lowest_layer(), [this, connection](const boost::system::error_code& ec) { //Immediately start accepting a new connection accept(); diff --git a/websocket.cpp b/websocket.cpp index 0ef22fe..fa77796 100644 --- a/websocket.cpp +++ b/websocket.cpp @@ -29,6 +29,7 @@ int main() { delete_url = "^/" + pt.get("webserver.delete_url") + "/?$"; list_url = "^/" + pt.get("webserver.list_url") + "/?$"; nfspath = pt.get("nfs.path"); + nfspaths = pt.get("nfs.path"); } cout << port << endl;; @@ -68,13 +69,78 @@ int main() { serverResourceUploads(servers, upload_url); serverResourceRenames(servers, rename_url); serverResourceDeletes(servers, delete_url); - serverResourceLists(server, list_url); - thread server_threads([&server](){ + serverResourceLists(servers, list_url); + thread server_threads([&servers](){ //Start WS-server - server.start(); + servers.start(); }); - this_thread::sleep_for(chrono::seconds(1)); + this_thread::sleep_for(chrono::seconds(2)); + + + +{ + //test wss + WssClient client("localhost:8081/upload", false); + client.onmessage = [&client](shared_ptr message) { + stringstream data_ss; + data_ss << message->data.rdbuf(); + cout << "Client: Message received: \"" << data_ss.str() << "\"" << endl; + // cout << "Client: Sending close connection" << endl; + // client.send_close(1000); + + ptree pt; + read_json(data_ss, pt); + string phase = pt.get("phase"); + if (phase.compare("TRANSFER") == 0) + { + cout << "Client: Sending close connection" << endl; + client.send_close(1000); + } + else + { + stringstream sss; + + sss << "sffafasfdaf"; + cout << "Client: Sending message: \"" << sss.str() << "\"" << endl; + client.send(sss); + } + + + + + + }; + + client.onopen = [&client]() { + cout << __LINE__<<" Client: Opened connection" << endl; + stringstream ss; + + ss << "#PREPARE#{\ + \"action\": \"UPLOAD_FILE\",\ + \"transfer\" : \"base64\",\ + \"data\" : {\ + \"file\":\"/1/test.pdf\",\ + \"size\" : 11,\ + \"overwrite\" : true},\ + \"ts\" : \"2015 - 07 - 31 08 : 00 : 00\"}"; + + cout << "Client: Sending message: \"" << ss.str() << "\"" << endl; + client.send(ss); + + }; + + client.onclose = [](int status, const string& reason) { + cout << "Client: Closed connection with status code " << status << endl; + }; + + //See http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/reference.html, Error Codes for error code meanings + client.onerror = [](const boost::system::error_code& ec) { + cout << "Client: Error: " << ec << ", error message: " << ec.message() << endl; + }; + + client.start(); +} server_threads.join();