url_hex_decode

in src/zgoog_cl_content_repo_gcs.clas.abap [0:0]


  METHOD url_hex_decode.
    DATA lv_pos TYPE i.
    DATA lv_len TYPE i.
    DATA lv_c    TYPE c LENGTH 1.
    DATA lv_rest TYPE i.
    DATA lv_x    TYPE x LENGTH 1.

    IF NOT iv_value CA '%'.
      rv_result = iv_value.
      EXIT.
    ENDIF.

    lv_pos = 0.
    lv_len = strlen( iv_value ).
    CLEAR rv_result.

    WHILE lv_pos < lv_len.
      lv_c = iv_value+lv_pos(1).
      IF lv_c = '%'.
        lv_pos = lv_pos + 1.
        lv_rest = lv_len - lv_pos.
        IF lv_rest < 2.
          gs_error-status_code = '400'.
          EXIT.
        ENDIF.
        lv_x = iv_value+lv_pos(2).
        lv_pos = lv_pos + 2.

        CALL FUNCTION 'SCMS_BIN_TO_TEXT'
          EXPORTING
            bin_line  = lv_x
          IMPORTING
            text_line = lv_c
          EXCEPTIONS
            failed    = 1
            OTHERS    = 2.
        IF sy-subrc <> 0.
          gs_error-status_code = 500.
        ENDIF.
      ELSE.
        lv_pos = lv_pos + 1.
      ENDIF.
      IF lv_c IS INITIAL.
        CONCATENATE rv_result gv_sp INTO rv_result.
      ELSE.
        CONCATENATE rv_result lv_c INTO rv_result.
      ENDIF.
    ENDWHILE.