2011년 3월 23일 수요일

ipc] Phone class를 찾아서...

RIL 관련된 TEXT를 찾는다.
Log.d(LOG_TAG, " sending the RIL command");
RIL 명령어를 보내준다? RIL 명령어가 뭔지 알면 RIL을 알겠네?
phone.invokeOemRilRequestRaw(bos.toByteArray(), null);
바로 붙어 있는 걸로 봐서 예가 보내주는 녀석이다.
그럼 phone이 뭔지 알아야 한다.
phone이 뭔지는 모르지만.
phone = PhoneFactory.getGsmPhone();
로 받는다.
캐스팅이 없으니 etGsmPhone()에서 return형이 phone과 같을 것이다.
정보를 좀 찾으러 가 보자.
소스인사이트 Ctrl+Shift+F로 텍스트를 검색하다가.
import com.android.internal.telephony.PhoneFactory;
가 나왔다. 폰 팩토리라는 java파일에 있거나 그 상위단에 포함되었을 것이다.
소스인사이트 Ctrl+O에서는 PhoneFactory name이 나오지 않는다.
리눅스에서 텔레포니 폴더를 검색한다.
find ./ -type d -iname "telephony" 2> /dev/null | grep "/android/internal"
오류는 표시하지 않고 디렉토리만 검색해서 나온 결과에 android/internal이 포함된 것을
찾으면 디렉토리 하나 밖에 나오지 않는다.
/REL/Android/frameworks/base/telephony/java/com/android/internal/telephony
cd 쓰기 귀찮아서...
 find ./ -type d -iname "telephony" 2> /dev/null | grep "/android/internal/" | tail -1 | xargs cd
하니 안된다 ㅡㅡ;
cd는 내부 명령어 때문이다. 췟 그럼 cd를 컴파일 하면 되지.

#include <stdio.h>
#include <unistd.h>
char buff[FILENAME_MAX];
int main(int argc, char* argv[])
{
chdir(argv[1]);
if (getcwd(buff, sizeof buff) != NULL) puts(buff);
else puts("unknown");
system("/bin/bash");
return 0;
}
라고 해서
 find ./ -type d -iname "telephony" 2> /dev/null | grep "/android/internal/" | tail -1 | xargs exec ./a.out {}
해도 안된다.
exec도 내부 명령어였던 것이다.
아놔. 댄장...
exec를 c로 컴파일 하는 것은 의미가 없다. ㅠㅠ chdir로 디렉토리를 바꾸어도 현재 쉘로 복귀를
하면서 다시 본래 디렉토리로 되어 버리기 때문인데 프로그램 실행전에 exec면 몰라도 프로그램
내부에서 exec 함수를 쓰는 것은 의미가 없게된다.
귀찮게 시간 낭비하다가... 그냥 수동으로 가본다.

    public static Phone getGsmPhone() {
        synchronized(PhoneProxy.lockForRadioTechnologyChange) {
            if (sGsmProxyPhone == null) {
                  sGsmProxyPhone = new GSMPhone(sContext, sCommandsInterfaces[0], sPhoneNotifier);
            }
            return sGsmProxyPhone;
        }
phoneFactory 내의 return sGsmProxyPhone; 결국 Phone 타입이다. 예를 찾자.
-> 그런데 왜 소스 인사이트에서 파일이 있는데도 검색이 안 되었을까 ㅡㅡ;
Alt+T에서 나오는 C source 파일에서 .java를 추가했는뎅.... 다른 자바 파일들은 보이던데..
이런. 로컬에 디렉토리가 없다. ㅡㅡ;
p4 latest revision해도 지워진 디렉토리는 캣치가 안되서 force 옵션을 줘서 땡겨야 했다.
p4로 소스를 다시 땡길동안
grep -Risn -A 2 -B 2 "class Phone " *
로 찾으면 하나만 딱 찾아진다.
vim 으로 열어서 Shift+V 후에 한칸 내리면 한줄 선택이 되는데
대문자 G를 누르면 마지막줄까지 선택이 된다.
y
로 카피를 하고 이클립스에 붙인다음
Ctrl+Shift+/ (넘어키패드에 있는 /) 를 해서 다 접은 다음
Phone 클레스를 찾으면 된다.
Phone 클레스 탐색편 끗.
       public static final class Phone implements DataColumnsWithJoins, CommonColumns {
            /**
             * This utility class cannot be instantiated
             */
            private Phone() {}
            /** MIME type used when storing this in data table. */
            public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/phone_v2";
            /**
             * The MIME type of mailto:%7B@link #CONTENT_URI} providing a directory of
             * phones.
             */
            public static final String CONTENT_TYPE = "vnd.android.cursor.dir/phone_v2";
            /**
             * The content:// style URI for all data records of the
             * mailto:%7B@link #CONTENT_ITEM_TYPE} MIME type, combined with the
             * associated raw contact and aggregate contact data.
             */
            public static final Uri CONTENT_URI = Uri.withAppendedPath(Data.CONTENT_URI,
                    "phones");
            /**
             * The content:// style URL for phone lookup using a filter. The filter returns
             * records of MIME type mailto:%7B@link #CONTENT_ITEM_TYPE}. The filter is applied
             * to display names as well as phone numbers. The filter argument should be passed
             * as an additional path segment after this URI.
             */
            public static final Uri CONTENT_FILTER_URI = Uri.withAppendedPath(CONTENT_URI,
                    "filter");
            public static final int TYPE_HOME = 1;
            public static final int TYPE_MOBILE = 2;
            public static final int TYPE_WORK = 3;
            public static final int TYPE_FAX_WORK = 4;
            public static final int TYPE_FAX_HOME = 5;
            public static final int TYPE_PAGER = 6;
            public static final int TYPE_OTHER = 7;
            public static final int TYPE_CALLBACK = 8;
            public static final int TYPE_CAR = 9;
            public static final int TYPE_COMPANY_MAIN = 10;
            public static final int TYPE_ISDN = 11;
            public static final int TYPE_MAIN = 12;
            public static final int TYPE_OTHER_FAX = 13;
            public static final int TYPE_RADIO = 14;
            public static final int TYPE_TELEX = 15;
            public static final int TYPE_TTY_TDD = 16;
            public static final int TYPE_WORK_MOBILE = 17;
            public static final int TYPE_WORK_PAGER = 18;
            public static final int TYPE_ASSISTANT = 19;
            public static final int TYPE_MMS = 20;
            /**
             * The phone number as the user entered it.
             * <P>Type: TEXT</P>
             */
            public static final String NUMBER = DATA;
            /**
             * @deprecated use mailto:%7B@link #getTypeLabel(Resources, int, CharSequence)} instead.
             * @hide
             */
            @Deprecated
            public static final CharSequence getDisplayLabel(Context context, int type,
                    CharSequence label, CharSequence[] labelArray) {
                return getTypeLabel(context.getResources(), type, label);
            }
            /**
             * @deprecated use mailto:%7B@link #getTypeLabel(Resources, int, CharSequence)} instead.
             * @hide
             */
            @Deprecated
            public static final CharSequence getDisplayLabel(Context context, int type,
                    CharSequence label) {
                return getTypeLabel(context.getResources(), type, label);
            }
            /**
             * Return the string resource that best describes the given
             * mailto:%7B@link #TYPE}. Will always return a valid resource.
             */
            public static final int getTypeLabelResource(int type) {
                switch (type) {
                    case TYPE_HOME: return com.android.internal.R.string.phoneTypeHome;
                    case TYPE_MOBILE: return com.android.internal.R.string.phoneTypeMobile;
                    case TYPE_WORK: return com.android.internal.R.string.phoneTypeWork;
                    case TYPE_FAX_WORK: return com.android.internal.R.string.phoneTypeFaxWork;
                    case TYPE_FAX_HOME: return com.android.internal.R.string.phoneTypeFaxHome;
                    case TYPE_PAGER: return com.android.internal.R.string.phoneTypePager;
                    case TYPE_OTHER: return com.android.internal.R.string.phoneTypeOther;
                    case TYPE_CALLBACK: return com.android.internal.R.string.phoneTypeCallback;
                    case TYPE_CAR: return com.android.internal.R.string.phoneTypeCar;
                    case TYPE_COMPANY_MAIN: return com.android.internal.R.string.phoneTypeCompanyMain;
                    case TYPE_ISDN: return com.android.internal.R.string.phoneTypeIsdn;
                    case TYPE_MAIN: return com.android.internal.R.string.phoneTypeMain;
                    case TYPE_OTHER_FAX: return com.android.internal.R.string.phoneTypeOtherFax;
                    case TYPE_RADIO: return com.android.internal.R.string.phoneTypeRadio;
                    case TYPE_TELEX: return com.android.internal.R.string.phoneTypeTelex;
                    case TYPE_TTY_TDD: return com.android.internal.R.string.phoneTypeTtyTdd;
                    case TYPE_WORK_MOBILE: return com.android.internal.R.string.phoneTypeWorkMobile;
                    case TYPE_WORK_PAGER: return com.android.internal.R.string.phoneTypeWorkPager;
                    case TYPE_ASSISTANT: return com.android.internal.R.string.phoneTypeAssistant;
                    case TYPE_MMS: return com.android.internal.R.string.phoneTypeMms;
                    default: return com.android.internal.R.string.phoneTypeCustom;
                }
            }
            /**
             * Return a mailto:%7B@link CharSequence} that best describes the given type,
             * possibly substituting the given mailto:%7B@link #LABEL} value
             * for mailto:%7B@link #TYPE_CUSTOM}.
             */
            public static final CharSequence getTypeLabel(Resources res, int type,
                    CharSequence label) {
                if ((type == TYPE_CUSTOM || type == TYPE_ASSISTANT) && !TextUtils.isEmpty(label)) {
                    return label;
                } else {
                    final int labelRes = getTypeLabelResource(type);
                    return res.getText(labelRes);
                }
            }
        }



이렇게 열심히 찾았지만... 결국

소스 인사이트에서 add/remove project files에서 remove special... 어쩌구에서
.js랑 .xml 을 빼버리고 찾으니...

Phone.java를 한방에 찾더라.

ㅠ.ㅠ

다중이 플랫폼의 슬픈현실이었다.

댓글 없음:

댓글 쓰기

국정원의 댓글 공작을 지탄합니다.

UPBIT is a South Korean company, and people died of suicide cause of coin investment.

 UPBIT is a South Korean company, and people died of suicide cause of coin. The company helps the people who control the market price manipu...