1

C++에서 native-host를 사용하고 있습니다. native64에서 base64를 chrome extension (기본 메시징)으로 base64 크기 base64 < 1M으로 보내면 프로그램이 실행 중입니다. 내가 크기 base64로> 1M와 크롬 확장 (기본 메시징)에 네이티브 응용 프로그램에서 64 기수를 보낼 때 Native Messaging 호스트가 1MB의 데이터를 전송할 수 없습니다.

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    std::cout.setf(std::ios_base::unitbuf); 
    unsigned int c, t=0; 
    inp=""; 
    t=0; 
    // Sum the first 4 chars from stdin (the length of the message passed). 
    for (int i = 0; i <= 3; i++) { 
     //t += getchar(); 
     t += std::pow(256.0f, i) * getchar(); 
    } 
    // Loop getchar to pull in the message until we reach the total 
    // length provided. 
    for (int i=0; i < t; i++) { 
     c = getchar(); 
     inp += c; 
    } 

    unsigned int len = inp.length(); 
    // We need to send the 4 btyes of length information 
    std::cout << char(((len>>0) & 0xFF)) 
       << char(((len>>8) & 0xFF)) 
       << char(((len>>16) & 0xFF)) 
       << char(((len>>24) & 0xFF)); 
    // Now we can output our message 
    std::cout << inp; 
    return 0; 
} 
+1

그래서 질문은 어디에 있습니까? 너는 무엇을 알고 싶니? –

+0

예, 이것은 의도적으로 1M 이상인 메시지를 허용하지 않습니다. 일련의 작은 메시지로 나누고 확장에서 데이터를 다시 어셈블해야합니다. – donaddon

+0

@donaddon 귀하의 청구 원인이 있습니까? – Xan

답변

2

기본 메시지 호스트 아래에있는 내 코드 "기본 메시징 호스트와 통신 할 때 오류"하지만, 프로그램 오류입니다 1024 * 1024 바이트를 초과하는 메시지를 보낼 수 없습니다.

https://cs.chromium.org/file%3Anative_message_process_host.cc%20kMaximumMessageSize에서 :

// Maximum message size in bytes for messages received from Native Messaging 
// hosts. Message size is limited mainly to prevent Chrome from crashing when 
// native application misbehaves (e.g. starts writing garbage to the pipe). 
const size_t kMaximumMessageSize = 1024 * 1024; 

이 문제를 해결하려면, 당신은 1MB 미만의 덩어리로 확장/응용 프로그램에 기본 메시징 호스트에서 보낸 메시지를 분할해야합니다.
네이티브 메시징 호스트에서 32 비트 메시지 길이 (최대 1MB)를 반복적으로 출력하고 그 다음 메시지 청크를 출력하는 루프를 만들 수 있습니다.
chrome.runtime.sendNativeMessage 대신 chrome.runtime.connectNative을 사용하여 하나의 메시지보다 오래 지속되는 포트를 엽니 다. sendNativeMessage을 사용하는 경우 포트가 하나의 응답을받은 후 닫혀 기본 메시지 호스트가 종료됩니다.

+0

적절한 출처 링크를 이용해 주셔서 감사합니다. 즉,이 상태는 꽤 유감 스럽다. – Xan

+0

@Xan 유감이란 무엇입니까? 1MB 제한, 해결 방법 또는 기본 메시징 설명서? –

+0

제한 사항. 이미 어색한 메시징 프로토콜이 훨씬 더 어색합니다. 물론, 그것이 문서화되지 않았다는 사실. – Xan