Jump to content

philipp.hofmann

Members
  • Content Count

    67
  • Joined

  • Last visited

Posts posted by philipp.hofmann


  1. Info: I was successful with the following code (using Indy now):

     

          with TIdHTTP.Create(nil) do
          try
            var FIdSSLIOHandlerSocketOpenSSL:TIdSSLIOHandlerSocketOpenSSL:=TIdSSLIOHandlerSocketOpenSSL.Create(nil);
            var Params: TIdMultiPartFormDataStream;
            filename:=StringReplace(Training.filename, '.ictt', '.fit', [rfIgnoreCase]);
            FIdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvTLSv1_2;
            FIdSSLIOHandlerSocketOpenSSL.SSLOptions.SSLVersions := [sslvTLSv1_2];
            IOHandler := FIdSSLIOHandlerSocketOpenSSL;
            Request.ContentType := 'multipart/form-data';
            Request.CustomHeaders.add('Authorization: Bearer ' + bearer);
            Params := TIdMultiPartFormDataStream.Create;
            try
              params.AddFile('file', filename, GetMIMETypeFromFile(filename));
              ResponseStr := Post('https://pushinglimits.club/api/oauth/upload_single_fit_file', Params);
            finally
              Params.Free;
            end;
          finally
            Free;
          end;

    • Like 1

  2. The following curl-test works fine on my machine:

    curl -X POST https://pushinglimits.club/api/oauth/upload_single_fit_file -H 'Content-Type: multipart/form-data' -H 'Authorization: Bearer ...' -F 'file=@Philipp_(SF6KICKR)_20231003_1941_Freies_Training_Training.fit'

     

    But the corresponding Delphi-Code will return 

    10:29:08.213 16488-Info Response: 404 Not Found: <!DOCTYPE html>
    <html lang="en"><head><meta charset="utf-8"><title>Error</title></head><body><pre>Cannot POST /oauth/upload_single_fit_file</pre></body></html>

     

    What could be a difference between both calls?
    I try to join the GenerateBoundary in System.Net.Mime but it's still not working.

    Http: TNetHTTPClient;
    formData: TMultipartFormData;
    headers: TNetHeaders;
    
    Http:=TNetHTTPClient.create(nil);
    Http.SecureProtocols := [THTTPSecureProtocol.TLS12];
    formData:=TMultipartFormData.create();
    headers:=TNetHeaders.create();
    setLength(headers, 2);
    headers[0]:=TNameValuePair.create('Content-Type', 'multipart/form-data');
    headers[1]:=TNameValuePair.create('Authorization', 'Bearer ' + bearer);
    formData.AddFile('file', filename);
    Http.Post('https://pushinglimits.club/api/oauth/upload_single_fit_file',formData,nil,headers);

     

    HttpDiff.png


  3. I have the same problem with a FMX-file in my project after migration to Delphi 11.3 and in my case also TMS is involved. Currently I don't know what to do. And I have installed with cleaned regristry.

    Every help is appreaciated.


  4. Hi,

     

    I have to make the following settings for a test with a video chat software:
    "What you can try, if you haven't already, would be to set the AVAudioSession to Mode AVAudioSession.Mode.videoChat and add the AVAudioSession.CategoryOption.mixWithOthers."

    The reason is that currently as soon as I enter the video chat room, the music played in the app stops playing.
    Now I've tried this with the following code:

     

    procedure TicTrainerF.initIOSAudioSession();
    var AudioSession: AVAudioSession;
        LErrorPtr: Pointer;
        LError: NSError;
        hasError: boolean;
    begin
      mlog.info('initIOSAudioSession');
      hasError:=false;
      LErrorPtr := nil;
      AudioSession := TAVAudioSession.Wrap(TAVAudioSession.OCClass.sharedInstance);
      if (not hasError) then
      begin
        AudioSession.setMode(CocoaNSStringConst(libAVFoundation, 'AVAudioSessionModeVideoChat'),@LErrorPtr);
        if (LErrorPtr <> nil) then
        begin
          LError := TNSError.Wrap(LErrorPtr);
          mlog.info('initIOSAudioSession-Error (setMode): '+NSStrToStr(LError.localizedDescription));
          hasError:=true;
        end;
      end;
      if (not hasError) then
      begin
        AudioSession.setCategory(CocoaNSStringConst(libAVFoundation, 'AVAudioSessionCategoryOptionMixWithOthers'),@LErrorPtr);
        if (LErrorPtr <> nil) then
        begin
          LError := TNSError.Wrap(LErrorPtr);
          mlog.info('initIOSAudioSession-Error (setCategory): '+NSStrToStr(LError.localizedDescription));
          hasError:=true;
        end;
      end;
      if (not hasError) then
        mlog.info('initIOSAudioSession: finished successfully');
    end;

     

     

    But I get an OSStatus error -50 error back during the calls.
    What else is wrong here?

    Regards, Philipp


  5. I was so stupid. Set the correct entitlements and it's fine. I don't understand why this entitlements are not set in the CameraComponent example project but there is seems to be the entitlement

     

        <key>com.apple.security.get-task-allow</key>
        <true/>

     

    which is not generated in my case. But it's working now.


  6. Hi,

    I want to use a video chat in our embedded browser (TTMSFNCWebBrowser).

     

    For Android I have to request the CAMERA + RECORD_AUDIO permission beforehand, that's clear.

    For Windows, it's helpful to create a TCameraComponent for a short time to get also the allowance beforehand.

    For iOS the Video-Chat-Software is asking for the permission to use camera and microphone.

     

    But I'm lost with MacOS: I don't find any solution to ask for the permission to use the camera or the microphone in our app beforehand and also the video chat software is not asking for it but displaying an error.
    Is there any possibility to add our app in the MacOS camera and microphone permission list beforehand (Mac: How to check app permissions for camera, mic, Photos - 9to5Mac)?

     

    Best regards,


  7. Hi,

     

    has anyone experience with BLE connection on ChromeOS. I search with Google and it should be fine since ChromeOS version 68 but one customer use ChromeOS 100 and bleDevice.DiscoverServices() is returning directly 0 services.

     

    Best regards, Philipp


  8. You find two entries in AndroidManifest.xml (here with Delphi 11):

        <uses-sdk android:minSdkVersion="23" android:targetSdkVersion="30" />

    So you have to compare not only the targetSdkVersion but also the minSdkVersion. Perhaps this reduce the number.
    You can set minSdkVersion manually in the Delphi 10.4.2 to the same value as in the Delphi 10.3.3 version to compare the number of devices then.
    But you can´t be sure that the Delphi 10.4.2 APK-file is running on Android devices with a lower sdk as with the default Delphi 10.4.2 value.

     

    • Like 1

  9. Hi,

     

    I handle the normal Exception for MacOS/Android/iOS with TgoExceptionReportMessage:

    [DELPHI]
        Application.OnException:=TgoExceptionReporter.ExceptionHandler;
        TMessageManager.DefaultManager.SubscribeToMessage(TgoExceptionReportMessage, HandleExceptionReport);
    [/DELPHI]

     

    But after a long runtime I get some exceptions that let the app crash instantly. I can see the following info in the IPS-Report:


    {"app_name":"icTrainer","timestamp":"2022-02-27 06:29:52.00 +0100","app_version":"1.1.20","slice_uuid":"a396d6ae-7496-3d1c-a2e6-01cca47875b5","build_version":"1.1.20","platform":2,"bundleID":"de.ictrainer","share_with_app_devs":1,"is_first_party":0,"bug_type":"309","os_version":"iPhone OS 15.3.1 (19D52)","incident_id":"8B389F09-04BA-44D0-8C8F-A4731A463CED","name":"icTrainer"}
    {
      "uptime" : 540000,
      "procLaunch" : "2022-02-26 23:20:01.8441 +0100",
      "procRole" : "Foreground",
      "version" : 2,
      "userID" : 501,
      "deployVersion" : 210,
      "modelCode" : "iPad5,3",
      "procStartAbsTime" : 12397598747101,
      "coalitionID" : 538,
      "osVersion" : {
        "isEmbedded" : true,
        "train" : "iPhone OS 15.3.1",
        "releaseType" : "User",
        "build" : "19D52"
      },
      "captureTime" : "2022-02-27 06:29:48.8427 +0100",
      "incident" : "8B389F09-04BA-44D0-8C8F-A4731A463CED",
      "bug_type" : "309",
      "pid" : 8845,
      "procExitAbsTime" : 13016489314095,
      "cpuType" : "ARM-64",
      "procName" : "icTrainer",
      "procPath" : "\/private\/var\/containers\/Bundle\/Application\/E6E92D83-83A8-4C74-93E0-7A164D03B852\/icTrainer.app\/icTrainer",
      "bundleInfo" : {"CFBundleShortVersionString":"1.1.20","CFBundleVersion":"1.1.20","CFBundleIdentifier":"de.ictrainer"},
      "storeInfo" : {"deviceIdentifierForVendor":"AA2D17ED-3D2F-4958-8B29-9E18FB8DB067","thirdParty":true},
      "parentProc" : "launchd",
      "parentPid" : 1,
      "coalitionName" : "de.ictrainer",
      "crashReporterKey" : "cddd0195c075fddd0ef10bb717fa644fb4870e8b",
      "isCorpse" : 1,
      "exception" : {"codes":"0x0000000000000000, 0x0000000000000000","rawCodes":[0,0],"type":"EXC_CRASH","signal":"SIGABRT"},
      "ktriageinfo" : "VM - Fault hit memory shortage\nVM - Fault hit memory shortage\nVM - Fault hit memory shortage\nVM - Compressor failed a blocking pager_get\n",
      "asi" : {"libsystem_c.dylib":["abort() called"]},
      "faultingThread" : 0,
      "threads" : [{"triggered":true,"id":1476280,"threadState":{"x":[{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":0},{"value":1},{"value":4697931816},{"value":4413228416,"symbolLocation":0,"symbol":"_main_thread"},{"value":6045610786204958370},{"value":7993421764,"symbolLocation":1040,"symbol":"__simple_bprintf"},{"value":162},{"value":0},{"value":56},{"value":3763094163105146229},{"value":2874369050621497},{"value":328},{"value":1032064},{"value":0},{"value":6},{"value":259},{"value":4413228640,"symbolLocation":224,"symbol":"_main_thread"},{"value":6170703888},{"value":4697931776},{"value":0},{"value":0},{"value":6170721342},{"value":4413228416,"symbolLocation":0,"symbol":"_main_thread"},{"value":311}],"flavor":"ARM_THREAD_STATE64","lr":{"value":7993522212},"cpsr":{"value":1073741824},"fp":{"value":6170703648},"sp":{"value":6170703616},"esr":{"value":1442840704,"description":" Address size fault"},"pc":{"value":7455607272,"matchesCrashFrame":1},"far":{"value":0}},"queue":"com.apple.main-thread","frames":[{"imageOffset":27112,"symbol":"__pthread_kill","symbolLocation":8,"imageIndex":0},{"imageOffset":67620,"symbol":"pthread_kill","symbolLocation":208,"imageIndex":1},{"imageOffset":127156,"symbol":"abort","symbolLocation":120,"imageIndex":2},{"imageOffset":109020,"symbol":"malloc_vreport","symbolLocation":548,"imageIndex":3},{"imageOffset":109640,"symbol":"malloc_zone_error","symbolLocation":100,"imageIndex":3},{"imageOffset":62060,"symbol":"nanov2_allocate_from_block$VARIANT$mp","symbolLocation":544,"imageIndex":3},{"imageOffset":58516,"symbol":"nanov2_allocate$VARIANT$mp","symbolLocation":124,"imageIndex":3},{"imageOffset":58312,"symbol":"nanov2_malloc$VARIANT$mp","symbolLocation":60,"imageIndex":3},{"imageOffset":20828,"symbol":"_malloc_zone_malloc","symbolLocation":148,"imageIndex":3},{"imageOffset":53768,"symbol":"System::SysGetMem(NativeInt)","symbolLocation":20,"imageIndex":4},{"imageOffset":54388,"symbol":"System::_ReallocMem(void*&, NativeInt)","symbolLocation":144,"imageIndex":4},{"imageOffset":123960,"symbol":"System::DynArraySetLength(void*&, void*, NativeInt, NativeInt*)","symbolLocation":480,"imageIndex":4},{"imageOffset":111656,"symbol":"System::_DynArraySetLength(void*&, void*, NativeInt)","symbolLocation":40,"imageIndex":4},{"imageOffset":3334032,"symbol":"Fmx::Canvas::Gpu::TCanvasGpu::InternalFillPolygon(System::DynamicArray<System::Types::TPointF>, float, Fmx::Graphics::TBrush*, System::Types::TRectF const&)","symbolLocation":628,"imageIndex":4},{"imageOffset":3324024,"symbol":"Fmx::Canvas::Gpu::TCanvasGpu::DoFillPath(Fmx::Graphics::TPathData*, float, Fmx::Graphics::TBrush*)","symbolLocation":116,"imageIndex":4},{"imageOffset":2491632,"symbol":"Fmx::Graphics::TCanvas::FillPath(Fmx::Graphics::TPathData*, float, Fmx::Graphics::TBrush*)","symbolLocation":88,"imageIndex":4},{"imageOffset":3709504,"symbol":"Fmx::Objects::TPie::Paint()","symbolLocation":304,"imageIndex":4},{"imageOffset":4431504,"symbol":"Fmx::Controls::TControl::PaintInternal()::DoPaintInternal(void*)","symbolLocation":640,"imageIndex":4},{"imageOffset":4432380,"symbol":"Fmx::Controls::TControl::PaintInternal()::PaintAndClipChild(void*)","symbolLocation":328,"imageIndex":4},{"imageOffset":4428448,"symbol":"Fmx::Controls::TControl::PaintInternal()","symbolLocation":136,"imageIndex":4},{"imageOffset":4351172,"symbol":"Fmx::Controls::TControl::PaintChildren()","symbolLocation":652,"imageIndex":4},{"imageOffset":4431732,"symbol":"Fmx::Controls::TControl::PaintInternal()::DoPaintInternal(void*)","symbolLocation":868,"imageIndex":4},{"imageOffset":4432380,"symbol":"Fmx::Controls::TControl::PaintInternal()::PaintAndClipChild(void*)","symbolLocation":328,"imageIndex":4},{"imageOffset":4428448,"symbol":"Fmx::Controls::TControl::PaintInternal()","symbolLocation":136,"imageIndex":4},{"imageOffset":4351172,"symbol":"Fmx::Controls::TControl::PaintChildren()","symbolLocation":652,"imageIndex":4},{"imageOffset":4066104,"symbol":"Fmx::Controls::Presentation::TPresentedControl::PaintChildren()","symbolLocation":72,"imageIndex":4},{"imageOffset":4431732,"symbol":"Fmx::Controls::TControl::PaintInternal()::DoPaintInternal(void*)","symbolLocation":868,"imageIndex":4},{"imageOffset":4432380,"symbol":"Fmx::Controls::TControl::PaintInternal()::PaintAndClipChild(void*)","symbolLocation":328,"imageIndex":4},{"imageOffset":4428448,"symbol":"Fmx::Controls::TControl::PaintInternal()","symbolLocation":136,"imageIndex":4},{"imageOffset":4351172,"symbol":"Fmx::Controls::TControl::PaintChildren()","symbolLocation":652,"imageIndex":4},{"imageOffset":4431732,"symbol":"Fmx::Controls::TControl::PaintInternal()::DoPaintInternal(void*)","symbolLocation":868,"imageIndex":4},{"imageOffset":4432380,"symbol":"Fmx::Controls::TControl::PaintInternal()::PaintAndClipChild(void*)","symbolLocation":328,"imageIndex":4},{"imageOffset":4428448,"symbol":"Fmx::Controls::TControl::PaintInternal()","symbolLocation":136,"imageIndex":4},{"imageOffset":4779288,"symbol":"Fmx::Forms::TCustomForm::PaintRects(System::Types::TRectF const*, int)","symbolLocation":776,"imageIndex":4},{"imageOffset":4137600,"symbol":"Fmx::Platform::Ios::TFMXGLKView3D::drawRect(Iosapi::Foundation::NSRect)","symbolLocation":104,"imageIndex":4},{"imageOffset":16238672,"symbol":"DispatchToDelphi","symbolLocation":144,"imageIndex":4},{"imageOffset":8024,"symbol":"-[GLKView _display:]","symbolLocation":248,"imageIndex":5},{"imageOffset":197584,"symbol":"CA::Layer::layout_and_display_if_needed(CA::Transaction*)","symbolLocation":424,"imageIndex":6},{"imageOffset":277048,"symbol":"CA::Context::commit_transaction(CA::Transaction*, double, double*)","symbolLocation":520,"imageIndex":6},{"imageOffset":311088,"symbol":"CA::Transaction::commit()","symbolLocation":660,"imageIndex":6},{"imageOffset":195092,"symbol":"CA::Transaction::flush_as_runloop_observer(bool)","symbolLocation":84,"imageIndex":6},{"imageOffset":253892,"symbol":"__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__","symbolLocation":32,"imageIndex":7},{"imageOffset":62984,"symbol":"__CFRunLoopDoObservers","symbolLocation":588,"imageIndex":7},{"imageOffset":43932,"symbol":"__CFRunLoopRun","symbolLocation":1012,"imageIndex":7},{"imageOffset":122396,"symbol":"CFRunLoopRunSpecific","symbolLocation":572,"imageIndex":7},{"imageOffset":6560,"symbol":"GSEventRunModal","symbolLocation":160,"imageIndex":8},{"imageOffset":5159824,"symbol":"-[UIApplication _run]","symbolLocation":1080,"imageIndex":9},{"imageOffset":2625900,"symbol":"UIApplicationMain","symbolLocation":332,"imageIndex":9},{"imageOffset":4096776,"symbol":"Fmx::Platform::Ios::TPlatformCocoaTouch::Run()","symbolLocation":88,"imageIndex":4},{"imageOffset":4726168,"symbol":"Fmx::Forms::TApplication::Run()","symbolLocation":92,"imageIndex":4},{"imageOffset":16237876,"symbol":"main","symbolLocation":168,"imageIndex":4},{"imageOffset":98896,"symbol":"start","symbolLocation":444,"imageIndex":10}]},{"id":1476283,"frames":[{"imageOffset":2832,"symbol":"mach_msg_trap","symbolLocation":8,"imageIndex":0},{"imageOffset":4404,"symbol":"mach_msg","symbolLocation":72,"imageIndex":0},{"imageOffset":189620,"symbol":"System::Internal::Machexceptions::ExcThread(void*)","symbolLocation":156,"imageIndex":4},{"imageOffset":25508,"symbol":"_pthread_start","symbolLocation":116,"imageIndex":1},{"imageOffset":18940,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":1476300,"name":"com.apple.uikit.eventfetch-thread","frames":[{"imageOffset":2832,"symbol":"mach_msg_trap","symbolLocation":8,"imageIndex":0},{"imageOffset":4404,"symbol":"mach_msg","symbolLocation":72,"imageIndex":0},{"imageOffset":27488,"symbol":"__CFRunLoopServiceMachPort","symbolLocation":368,"imageIndex":7},{"imageOffset":44104,"symbol":"__CFRunLoopRun","symbolLocation":1184,"imageIndex":7},{"imageOffset":122396,"symbol":"CFRunLoopRunSpecific","symbolLocation":572,"imageIndex":7},{"imageOffset":95196,"symbol":"-[NSRunLoop(NSRunLoop) runMode:beforeDate:]","symbolLocation":232,"imageIndex":11},{"imageOffset":351308,"symbol":"-[NSRunLoop(NSRunLoop) runUntilDate:]","symbolLocation":88,"imageIndex":11},{"imageOffset":4626604,"symbol":"-[UIEventFetcher threadMain]","symbolLocation":512,"imageIndex":9},{"imageOffset":407740,"symbol":"__NSThread__start__","symbolLocation":792,"imageIndex":11},{"imageOffset":25508,"symbol":"_pthread_start","symbolLocation":116,"imageIndex":1},{"imageOffset":18940,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":1476317,"frames":[{"imageOffset":4232,"symbol":"__semwait_signal","symbolLocation":8,"imageIndex":0},{"imageOffset":18656,"symbol":"nanosleep","symbolLocation":212,"imageIndex":2},{"imageOffset":21928,"symbol":"usleep","symbolLocation":64,"imageIndex":2},{"imageOffset":900988,"symbol":"System::Classes::TThread::Sleep(int)","symbolLocation":32,"imageIndex":4},{"imageOffset":12926628,"symbol":"Mybluetoothmanager::TBluetoothLEService::Execute()","symbolLocation":2820,"imageIndex":4},{"imageOffset":1150008,"symbol":"System::Classes::ThreadProc(System::Classes::TThread*)","symbolLocation":188,"imageIndex":4},{"imageOffset":102528,"symbol":"System::ThreadWrapper(void*)","symbolLocation":48,"imageIndex":4},{"imageOffset":25508,"symbol":"_pthread_start","symbolLocation":116,"imageIndex":1},{"imageOffset":18940,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":1476379,"frames":[{"imageOffset":5360,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":0},{"imageOffset":52220,"symbol":"_pthread_cond_wait$VARIANT$mp","symbolLocation":1216,"imageIndex":1},{"imageOffset":17607604,"symbol":"thread_worker","symbolLocation":100,"imageIndex":4},{"imageOffset":18940,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":1476380,"frames":[{"imageOffset":5360,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":0},{"imageOffset":52220,"symbol":"_pthread_cond_wait$VARIANT$mp","symbolLocation":1216,"imageIndex":1},{"imageOffset":17607604,"symbol":"thread_worker","symbolLocation":100,"imageIndex":4},{"imageOffset":18940,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":1476381,"frames":[{"imageOffset":5360,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":0},{"imageOffset":52220,"symbol":"_pthread_cond_wait$VARIANT$mp","symbolLocation":1216,"imageIndex":1},{"imageOffset":17607604,"symbol":"thread_worker","symbolLocation":100,"imageIndex":4},{"imageOffset":18940,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":1476382,"name":"SDLTimer","frames":[{"imageOffset":5360,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":0},{"imageOffset":52220,"symbol":"_pthread_cond_wait$VARIANT$mp","symbolLocation":1216,"imageIndex":1},{"imageOffset":31569780,"symbol":"SDL_CondWaitTimeout","symbolLocation":148,"imageIndex":4},{"imageOffset":31570552,"symbol":"SDL_SemWaitTimeout","symbolLocation":76,"imageIndex":4},{"imageOffset":31456008,"symbol":"SDL_TimerThread","symbolLocation":404,"imageIndex":4},{"imageOffset":31572488,"symbol":"SDL_RunThread","symbolLocation":60,"imageIndex":4},{"imageOffset":31571056,"symbol":"RunThread","symbolLocation":12,"imageIndex":4},{"imageOffset":25508,"symbol":"_pthread_start","symbolLocation":116,"imageIndex":1},{"imageOffset":18940,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":1476408,"name":"AURemoteIO::IOThread","frames":[{"imageOffset":2832,"symbol":"mach_msg_trap","symbolLocation":8,"imageIndex":0},{"imageOffset":4404,"symbol":"mach_msg","symbolLocation":72,"imageIndex":0},{"imageOffset":10140,"symbol":"void* caulk::thread_proxy<std::__1::tuple<caulk::thread::attributes, AURemoteIO::IOThread::IOThread(AURemoteIO&, caulk::thread::attributes const&, caulk::mach::os_workgroup const&)::'lambda'(), std::__1::tuple<> > >(void*)","symbolLocation":532,"imageIndex":12},{"imageOffset":25508,"symbol":"_pthread_start","symbolLocation":116,"imageIndex":1},{"imageOffset":18940,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":1476416,"frames":[{"imageOffset":5360,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":0},{"imageOffset":52220,"symbol":"_pthread_cond_wait$VARIANT$mp","symbolLocation":1216,"imageIndex":1},{"imageOffset":1203756,"symbol":"System::Syncobjs::TConditionVariableMutex::WaitFor(System::Syncobjs::TMutex*, unsigned int)","symbolLocation":300,"imageIndex":4},{"imageOffset":7075780,"symbol":"Avplayer::TFrameQueue::peek_writable()","symbolLocation":64,"imageIndex":4},{"imageOffset":7090848,"symbol":"Avplayer::TAVAudioThread::Execute()","symbolLocation":740,"imageIndex":4},{"imageOffset":1150008,"symbol":"System::Classes::ThreadProc(System::Classes::TThread*)","symbolLocation":188,"imageIndex":4},{"imageOffset":102528,"symbol":"System::ThreadWrapper(void*)","symbolLocation":48,"imageIndex":4},{"imageOffset":25508,"symbol":"_pthread_start","symbolLocation":116,"imageIndex":1},{"imageOffset":18940,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":1476417,"frames":[{"imageOffset":4232,"symbol":"__semwait_signal","symbolLocation":8,"imageIndex":0},{"imageOffset":18656,"symbol":"nanosleep","symbolLocation":212,"imageIndex":2},{"imageOffset":21928,"symbol":"usleep","symbolLocation":64,"imageIndex":2},{"imageOffset":900988,"symbol":"System::Classes::TThread::Sleep(int)","symbolLocation":32,"imageIndex":4},{"imageOffset":7092080,"symbol":"Avplayer::TAVRefreshThread::Execute()","symbolLocation":208,"imageIndex":4},{"imageOffset":1150008,"symbol":"System::Classes::ThreadProc(System::Classes::TThread*)","symbolLocation":188,"imageIndex":4},{"imageOffset":102528,"symbol":"System::ThreadWrapper(void*)","symbolLocation":48,"imageIndex":4},{"imageOffset":25508,"symbol":"_pthread_start","symbolLocation":116,"imageIndex":1},{"imageOffset":18940,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":1476418,"frames":[{"imageOffset":2916,"symbol":"semaphore_timedwait_trap","symbolLocation":8,"imageIndex":0},{"imageOffset":17268,"symbol":"_dispatch_sema4_timedwait$VARIANT$mp","symbolLocation":60,"imageIndex":13},{"imageOffset":18688,"symbol":"_dispatch_semaphore_wait_slow","symbolLocation":72,"imageIndex":13},{"imageOffset":344376,"symbol":"System::Sysutils::WaitForSyncWaitObj(void*, unsigned int)","symbolLocation":92,"imageIndex":4},{"imageOffset":345408,"symbol":"System::Sysutils::WaitOrSignalObj(void*, void*, unsigned int)","symbolLocation":80,"imageIndex":4},{"imageOffset":93772,"symbol":"System::TMonitor::Wait(System::TMonitor*, unsigned int)","symbolLocation":140,"imageIndex":4},{"imageOffset":40392,"symbol":"System::TMonitor::Wait(System::TObject*, System::TObject*, unsigned int)","symbolLocation":88,"imageIndex":4},{"imageOffset":1204324,"symbol":"System::Syncobjs::TConditionVariableCS::WaitFor(System::Syncobjs::TCriticalSection*, unsigned int)","symbolLocation":88,"imageIndex":4},{"imageOffset":7201892,"symbol":"Avplayer::TAVPlayer::WaitForRead()","symbolLocation":96,"imageIndex":4},{"imageOffset":7083436,"symbol":"Avplayer::TAVReadThread::Execute()","symbolLocation":3276,"imageIndex":4},{"imageOffset":1150008,"symbol":"System::Classes::ThreadProc(System::Classes::TThread*)","symbolLocation":188,"imageIndex":4},{"imageOffset":102528,"symbol":"System::ThreadWrapper(void*)","symbolLocation":48,"imageIndex":4},{"imageOffset":25508,"symbol":"_pthread_start","symbolLocation":116,"imageIndex":1},{"imageOffset":18940,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":1476480,"frames":[{"imageOffset":5360,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":0},{"imageOffset":52220,"symbol":"_pthread_cond_wait$VARIANT$mp","symbolLocation":1216,"imageIndex":1},{"imageOffset":23199340,"symbol":"frame_worker_thread","symbolLocation":492,"imageIndex":4},{"imageOffset":18940,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":1476481,"frames":[{"imageOffset":5360,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":0},{"imageOffset":52220,"symbol":"_pthread_cond_wait$VARIANT$mp","symbolLocation":1216,"imageIndex":1},{"imageOffset":23199340,"symbol":"frame_worker_thread","symbolLocation":492,"imageIndex":4},{"imageOffset":18940,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":1476482,"frames":[{"imageOffset":5360,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":0},{"imageOffset":52220,"symbol":"_pthread_cond_wait$VARIANT$mp","symbolLocation":1216,"imageIndex":1},{"imageOffset":23199340,"symbol":"frame_worker_thread","symbolLocation":492,"imageIndex":4},{"imageOffset":18940,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":1476483,"frames":[{"imageOffset":5360,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":0},{"imageOffset":52220,"symbol":"_pthread_cond_wait$VARIANT$mp","symbolLocation":1216,"imageIndex":1},{"imageOffset":23199340,"symbol":"frame_worker_thread","symbolLocation":492,"imageIndex":4},{"imageOffset":18940,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":1476484,"frames":[{"imageOffset":5360,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":0},{"imageOffset":52220,"symbol":"_pthread_cond_wait$VARIANT$mp","symbolLocation":1216,"imageIndex":1},{"imageOffset":1203756,"symbol":"System::Syncobjs::TConditionVariableMutex::WaitFor(System::Syncobjs::TMutex*, unsigned int)","symbolLocation":300,"imageIndex":4},{"imageOffset":7075780,"symbol":"Avplayer::TFrameQueue::peek_writable()","symbolLocation":64,"imageIndex":4},{"imageOffset":7186712,"symbol":"Avplayer::TAVPlayer::queue_picture(Frame::TAVFrame*, double, double, long long, int)","symbolLocation":48,"imageIndex":4},{"imageOffset":7089600,"symbol":"Avplayer::TAVVideoThread::Execute()","symbolLocation":1224,"imageIndex":4},{"imageOffset":1150008,"symbol":"System::Classes::ThreadProc(System::Classes::TThread*)","symbolLocation":188,"imageIndex":4},{"imageOffset":102528,"symbol":"System::ThreadWrapper(void*)","symbolLocation":48,"imageIndex":4},{"imageOffset":25508,"symbol":"_pthread_start","symbolLocation":116,"imageIndex":1},{"imageOffset":18940,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":1476485,"frames":[{"imageOffset":4232,"symbol":"__semwait_signal","symbolLocation":8,"imageIndex":0},{"imageOffset":18656,"symbol":"nanosleep","symbolLocation":212,"imageIndex":2},{"imageOffset":21928,"symbol":"usleep","symbolLocation":64,"imageIndex":2},{"imageOffset":900988,"symbol":"System::Classes::TThread::Sleep(int)","symbolLocation":32,"imageIndex":4},{"imageOffset":7092092,"symbol":"Avplayer::TAVRefreshThread::Execute()","symbolLocation":220,"imageIndex":4},{"imageOffset":1150008,"symbol":"System::Classes::ThreadProc(System::Classes::TThread*)","symbolLocation":188,"imageIndex":4},{"imageOffset":102528,"symbol":"System::ThreadWrapper(void*)","symbolLocation":48,"imageIndex":4},{"imageOffset":25508,"symbol":"_pthread_start","symbolLocation":116,"imageIndex":1},{"imageOffset":18940,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":1518290,"frames":[{"imageOffset":18920,"symbol":"start_wqthread","symbolLocation":0,"imageIndex":1}]},{"id":1532058,"frames":[{"imageOffset":5360,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":0},{"imageOffset":52220,"symbol":"_pthread_cond_wait$VARIANT$mp","symbolLocation":1216,"imageIndex":1},{"imageOffset":17607604,"symbol":"thread_worker","symbolLocation":100,"imageIndex":4},{"imageOffset":18940,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":1532059,"frames":[{"imageOffset":5360,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":0},{"imageOffset":52220,"symbol":"_pthread_cond_wait$VARIANT$mp","symbolLocation":1216,"imageIndex":1},{"imageOffset":17607604,"symbol":"thread_worker","symbolLocation":100,"imageIndex":4},{"imageOffset":18940,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":1532060,"frames":[{"imageOffset":5360,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":0},{"imageOffset":52220,"symbol":"_pthread_cond_wait$VARIANT$mp","symbolLocation":1216,"imageIndex":1},{"imageOffset":17607604,"symbol":"thread_worker","symbolLocation":100,"imageIndex":4},{"imageOffset":18940,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":1532061,"frames":[{"imageOffset":5360,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":0},{"imageOffset":52220,"symbol":"_pthread_cond_wait$VARIANT$mp","symbolLocation":1216,"imageIndex":1},{"imageOffset":1203756,"symbol":"System::Syncobjs::TConditionVariableMutex::WaitFor(System::Syncobjs::TMutex*, unsigned int)","symbolLocation":300,"imageIndex":4},{"imageOffset":7075780,"symbol":"Avplayer::TFrameQueue::peek_writable()","symbolLocation":64,"imageIndex":4},{"imageOffset":7090848,"symbol":"Avplayer::TAVAudioThread::Execute()","symbolLocation":740,"imageIndex":4},{"imageOffset":1150008,"symbol":"System::Classes::ThreadProc(System::Classes::TThread*)","symbolLocation":188,"imageIndex":4},{"imageOffset":102528,"symbol":"System::ThreadWrapper(void*)","symbolLocation":48,"imageIndex":4},{"imageOffset":25508,"symbol":"_pthread_start","symbolLocation":116,"imageIndex":1},{"imageOffset":18940,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":1532062,"frames":[{"imageOffset":4232,"symbol":"__semwait_signal","symbolLocation":8,"imageIndex":0},{"imageOffset":18656,"symbol":"nanosleep","symbolLocation":212,"imageIndex":2},{"imageOffset":21928,"symbol":"usleep","symbolLocation":64,"imageIndex":2},{"imageOffset":900988,"symbol":"System::Classes::TThread::Sleep(int)","symbolLocation":32,"imageIndex":4},{"imageOffset":7092080,"symbol":"Avplayer::TAVRefreshThread::Execute()","symbolLocation":208,"imageIndex":4},{"imageOffset":1150008,"symbol":"System::Classes::ThreadProc(System::Classes::TThread*)","symbolLocation":188,"imageIndex":4},{"imageOffset":102528,"symbol":"System::ThreadWrapper(void*)","symbolLocation":48,"imageIndex":4},{"imageOffset":25508,"symbol":"_pthread_start","symbolLocation":116,"imageIndex":1},{"imageOffset":18940,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":1532063,"frames":[{"imageOffset":2916,"symbol":"semaphore_timedwait_trap","symbolLocation":8,"imageIndex":0},{"imageOffset":17268,"symbol":"_dispatch_sema4_timedwait$VARIANT$mp","symbolLocation":60,"imageIndex":13},{"imageOffset":18688,"symbol":"_dispatch_semaphore_wait_slow","symbolLocation":72,"imageIndex":13},{"imageOffset":344376,"symbol":"System::Sysutils::WaitForSyncWaitObj(void*, unsigned int)","symbolLocation":92,"imageIndex":4},{"imageOffset":345408,"symbol":"System::Sysutils::WaitOrSignalObj(void*, void*, unsigned int)","symbolLocation":80,"imageIndex":4},{"imageOffset":93772,"symbol":"System::TMonitor::Wait(System::TMonitor*, unsigned int)","symbolLocation":140,"imageIndex":4},{"imageOffset":40392,"symbol":"System::TMonitor::Wait(System::TObject*, System::TObject*, unsigned int)","symbolLocation":88,"imageIndex":4},{"imageOffset":1204324,"symbol":"System::Syncobjs::TConditionVariableCS::WaitFor(System::Syncobjs::TCriticalSection*, unsigned int)","symbolLocation":88,"imageIndex":4},{"imageOffset":7201892,"symbol":"Avplayer::TAVPlayer::WaitForRead()","symbolLocation":96,"imageIndex":4},{"imageOffset":7083436,"symbol":"Avplayer::TAVReadThread::Execute()","symbolLocation":3276,"imageIndex":4},{"imageOffset":1150008,"symbol":"System::Classes::ThreadProc(System::Classes::TThread*)","symbolLocation":188,"imageIndex":4},{"imageOffset":102528,"symbol":"System::ThreadWrapper(void*)","symbolLocation":48,"imageIndex":4},{"imageOffset":25508,"symbol":"_pthread_start","symbolLocation":116,"imageIndex":1},{"imageOffset":18940,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":1532391,"frames":[{"imageOffset":5360,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":0},{"imageOffset":52220,"symbol":"_pthread_cond_wait$VARIANT$mp","symbolLocation":1216,"imageIndex":1},{"imageOffset":17607604,"symbol":"thread_worker","symbolLocation":100,"imageIndex":4},{"imageOffset":18940,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":1532392,"frames":[{"imageOffset":5360,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":0},{"imageOffset":52220,"symbol":"_pthread_cond_wait$VARIANT$mp","symbolLocation":1216,"imageIndex":1},{"imageOffset":17607604,"symbol":"thread_worker","symbolLocation":100,"imageIndex":4},{"imageOffset":18940,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]},{"id":1532393,"frames":[{"imageOffset":5360,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":0},{"imageOffset":52220,"symbol":"_pthread_cond_wait$VARIANT$mp","symbolLocation":1216,"imageIndex":1},{"imageOffset":17607604,"symbol":"thread_worker","symbolLocation":100,"imageIndex":4},{"imageOffset":18940,"symbol":"thread_start","symbolLocation":8,"imageIndex":1}]}],
      "usedImages" : [
    [/CODE]

     

    Does somebody has an idea how to search for this issue and handle it?

     

    Best regards, Philipp


  10. I have a new problem with MacOS12 (older versions are fine).

    I use the following OpenSSL-Libs to send mails:

    Code:
    InitSSL from /Applications/icTrainer.app/Contents/MacOS
    SSL-Version: OpenSSL 1.0.2s 28 May 2019

    and the files have the names

    Code:
    libcrypto.1.0.0.dylib
    libssl.1.0.0.dylib

    but I get the following error message now:

    Code:
    Invalid dylib load. Clients should not load the unversioned libcrpto dylib as it does not have a stable ABI.
    ...
    libcrypto.dylib

    -> here I can´t see the version number.


    a) What to do?
    b) Where to get the newest version of  1.0.0-MacOS-64-Libs?

     

    Best regards, Philipp

    Grüße, Philipp


  11. If there is an access violation at this line, the binding was not successful before.

     

    a) Is the IP-address 192.168.1.56 correct for your test? This is the only relevant change by my patches.

    b) Did your App has the permission to access local network in iOS settings?

    c) Did your Provision profile has the new permission "com.apple.developer.networking.multicast"?
        https://developer.apple.com/contact/request/networking-multicast


    On my devices (I've tested with three iOS devices), it works fine (with and without mobile data).


  12. Quote

    I don't understand what you mean.  Please clarify.  Is the event assigned a handler?  If so, is the handler being called?  If so, is the provided TIdSocketHandle object filled in with the correct port information?

    There is no handler assigned to the event. The handler is called.

    Quote

    I don't see any port number being assigned in that code.  So, unless the port number is assigned elsewhere after TTetheringNetworkServerCommUDP.Create() exits and before TTetheringNetworkServerCommUDP.DoStartServer() is called, then the UDP server will end up binding to a random port for each entry created in FUDPServer.Bindings.

    The port is set correctly between both methods in the Tethering implementation. It works perfectly with Windows, Android, iOS 13 and MacOS 10.

     

    But now we come to magic: Since today it's running fine on MacOS 11 and iOS 14 also. I haven't updated the code or the OS. But I've updated to newest XCode version this week. This is the only dependency I can imagine that this was the reason. 
    But thanks for your help to get a better understanding of the technic below Tethering. If I run again into problems, this could help.


  13. The OnBeforeBind is requested but not assigned. But this is also the case under Windows and seems to be no problem.

    The code you are asking for should be

    constructor TTetheringNetworkServerCommUDP.Create(AIPVersion: TCommIPVersion; const ABindToAddress: string);
    var
      I: Integer;
      LSocket: IIPSocketHandle;
      LSubnetTable: TArray<TIPv4Subnet>;
    begin
      inherited Create;
      FIPVersion := AIPVersion;
      FUDPServer := PeerFactory.CreatePeer('', IIPUDPServer, nil) as IIPUDPServer;
      FUDPServer.ThreadedEvent := True;
      FUDPServer.OnRead := DoUDPRead;
      FUDPServer.OnException := DoUDPException;
      FUDPServer.IPVersion := FIPVersion;
    
      if ABindToAddress <> '' then
      begin
        FSocketUDP := FUDPServer.Bindings.Add;
        FSocketUDP.IP := ABindToAddress;
        FSocketUDP.IPVersion := FIPVersion;
      end
      else
      begin
        LSubnetTable := GStackPeers.GetIPv4Subnets;
        if Length(LSubnetTable) < 2 then
        begin
          FSocketUDP := FUDPServer.Bindings.Add;
          FSocketUDP.IPVersion := FIPVersion;
        end
        else
        begin
          for I := Low(LSubnetTable) to High(LSubnetTable) do
          begin
            LSocket := FUDPServer.Bindings.Add;
            LSocket.IPVersion := FIPVersion;
            LSocket.IP := LSubnetTable[I].Address;
            if not assigned(FSocketUDP) then
              FSocketUDP := LSocket;
          end;
        end;
      end;
    end;
                           
    function TTetheringNetworkServerCommUDP.DoStartServer: Boolean;
    begin
      Result := True;
      try
        FUDPServer.Active := True;
      except
        // This is a non conventional method to catch an exception that is in a library that we do not want to have a dependency.
        // This is considered a HACK and not a good sample of programming techniques.
        // We are going to let this code handle the exceptions until we add a proper mechanism to propagate the
        // Indy exceptions through the IPPeerAPI in an ordered and safe manner.
        on E: Exception do
        begin
          Result := False;
          if not (CheckExceptionName(E, 'EIdCouldNotBindSocket') or CheckExceptionName(E, 'EIdSocketError')) then // Do not translate
            raise;
        end;
      end;
    end;

    Do you have an example how to use TIdUDPServer directly? I'm using the Delphi Tethering implementation to hide such complicate issues from me. And now I'm in as I try to solve an error.


  14. Hi Remy,

    a) I've checked now with "netstat -an".

     

    On MacOS10 I get the following entries:

     

    Proto  Recv-Q Send-Q Local Address           Foreign Address        (state)

    tcp4    0           0           *.2020                       *.*                              LISTEN
    udp4   0          0            *.2020                       *.*

     

    On MacOS11 I get the following entry only:

    Proto  Recv-Q Send-Q Local Address           Foreign Address        (state)

    tcp4    0           0           *.2020                       *.*                              LISTEN

    but there is no entry for *.2020.

     

    I can see with Wireshark-Packet-Sniffer that the UDP package for Port 2020 is there but not read on MacOS11 computer.

     

    Best regards, Philipp


  15.  

    On 6/14/2021 at 6:31 PM, Remy Lebeau said:

    Did you verify that your UDP listening port is actually open, and that inbound data is actually reaching that port?  If Select() returns false, it means the underlying OS reported that no data was available before the specified timeout had elapsed.  What is your AcceptWait set to exactly?

    Hi Remy,
    do you have any other idea what to check on my side to solve the MacOS11 issue?
    Can you reproduce on your side the issue with MacOS11?
    Best regards, Philipp

×